提示:在很多的报错种,都是由于邮箱的POP3/SMTP/IMAP没有打开,
设置如下:
1、登陆163邮箱,找到设置项,POP3/SMTP/IMAP
2、默认不开启smtp要绑定手机之后才能开启
3、开启之后会给你一个授权密码,只会发送一次,要保存好,然后在上面密码出写上授权密码,并非邮箱密码。
4、
邮件发送配置:
打开配置文件将下面代码添加到 components => [...]中(例:高级版默认配置在/common/config/main-local.php)
1 'mailer' => [ 2 'class' => 'yii\swiftmailer\Mailer', 3 'viewPath' => '@common/mail', 4 'useFileTransport' => false, //这里一定要改成false,不然邮件不会发送 5 'transport' => [ 6 'class' => 'Swift_SmtpTransport', 7 'host' => 'smtp.163.com', 8 'username' => 'zpllong@163.com', 9 'password' => '*********', //如果是163邮箱,此处要填(授权码) 10 'port' => '25', 11 'encryption' => 'tls', 12 ], 13 ],
在控制器中调用:
1 $mail= Yii::$app->mailer->compose(); 2 $mail->setTo('244029201@qq.com'); 3 $mail->setSubject("邮件测试"); 4 //$mail->setTextBody('zheshisha '); //发布纯文字文本 5 $mail->setHtmlBody("<br>问我我我我我"); //发布可以带html标签的文本 6 if($mail->send()) 7 echo "success"; 8 else 9 echo "failse"; 10 die();
附带个人写的一个小demo,写的不好希望大神不要喷我
1 public function actionSend(){ 2 //邮件组成 3 $mail= Yii::$app->mailer->compose(); 4 5 $model = new User(); 6 if(!empty($_POST)){ 7 8 //取到要发送的邮箱 9 if(!empty($_POST['checkbook'])){ 10 $email_data = array(); //邮箱地址 11 $user_id = $_POST['checkbook']; 12 foreach ($user_id as $key => $value){ 13 $email_data[] = Yii::$app->db->createCommand("select email from item_z_user where id=$value")->queryOne(); 14 } 15 } 16 //取到要发送的内容 17 if(isset($_POST['activity_id'])){ 18 $activity_id = explode(',',$_POST['activity_id']); 19 20 $activity_data = array(); 21 foreach ($activity_id as $key=>$value){ 22 23 $activity_data[$key] = Yii::$app->db->createCommand("select * from item_z_activity where id=$value")->queryOne(); 24 } 25 } 26 27 } 28 $send = array(); 29 //第一层循环 30 foreach ($email_data as $key1 => $value1){ 31 //第二层循环用邮箱作为键 32 foreach ($value1 as $key2 =>$value2){ 33 //循环要发送的信息,多条 34 foreach ($activity_data as $key3 => $value3){ 35 foreach($value3 as $key4 => $value4){ 36 $send[$value2][$key3] = $value3; 37 } 38 } 39 } 40 } 41 // var_dump($send);die; 42 43 $mail= Yii::$app->mailer->compose(); 44 //第一层循环邮箱 45 foreach ($send as $key => $value){ 46 $mail->setTo($key); 47 $mail->setSubject("邮件测试"); 48 //$mail->setTextBody('zheshisha '); //发布纯文字文本 49 //第二层循环取内容 50 foreach ($value as $key1 => $value1){ 51 // var_dump($value1['title']);die; 52 //拼接邮件信息字符串 53 $email = ""; 54 $email .= "<h1>$value1[title]</h1>"; 55 $email .= "<h2>date('Y-m-d',$value1[createtime])</h2>"; 56 $email .= "<h2>$value1[num]</h2>"; 57 $email .= "<h2>$value1[desciption]</h2>"; 58 $email .= "<h2>$value1[content]</h2>"; 59 $email .= "<h2>$value1[register]</h2>"; 60 $email .= "<h2>$value1[content]</h2><br/>"; 61 62 $mail->setHtmlBody("$email"); //发布可以带html标签的文本 63 if($mail->send()) 64 $redirect = "success"; 65 else 66 $redirectecho = "failse"; 67 } 68 }
69 return $this->render('send',[
70 'redirect' => $redirect,
71 ]);
72 }