今天想在监控上做一个yii2使用qq邮箱发送邮件的功能。
一、安装swiftMailer扩展
默认yii 2.0会有这个扩展,如果没有就安装。
composer require –prefer-dist yiisoft/yii2-swiftmailer
或者修改composer.json,require加入: “yiisoft/yii2-swiftmailer”: “*”,
二、开启QQ邮箱IMAP/STMP服务
进入你的QQ邮箱,进入账户界面->设置->账户->开启服务:IMAP/SMTP服务
这里的意思是可以使用imap.qq.com作为邮件接收服务器,smtp.qq.com作为邮件发送服务器。
IMAP是什么?
IMAP,即Internet Message Access Protocol(互联网邮件访问协议),您可以通过这种协议从邮件服务器上获取邮件的信息、下载邮件等。IMAP与POP3类似,都是一种邮件获取协议。区别就是一个有消息反馈,一个没反馈。
根据页面要求发送短信开启后可以获取授权码,相当于发送账号的密码,记得保存下来。
三、修改yii2配置文件
我是修改了advanced\common\config\main-local.php,加入以下内容:
<?php return [ 'components' => [ 'mailer' => [ 'class' => 'yii\swiftmailer\Mailer', 'useFileTransport' =>false,//这句一定有,false发送邮件,true只是生成邮件在runtime文件夹下,不发邮件 'transport' => [ 'class' => 'Swift_SmtpTransport', 'host' => 'smtp.qq.com', //每种邮箱的host配置不一样 'username' => 'xxx@qq.com',//用发送开启了功能的邮箱 'password' => 'xxxxxx',//授权码 'port' => '465', 'encryption' => 'ssl', ], 'messageConfig'=>[ 'charset'=>'UTF-8', 'from'=>['xxx@qq.com'=>'admin'] ], ],
四、控制器或命令行编写发送代码
$url='http://www.jd.com/'; $mail= Yii::$app->mailer->compose(); $mail->setTo('xxx@foxmail.com'); $mail->setSubject("上架了"); //$mail->setTextBody('zheshisha '); //发布纯文字文本 $mail->setHtmlBody("<br>商品:<a href='".$url."' target='_blank'>购买地址</a>"); //发布可以带html标签的文本 if($mail->send()) echo "success"; else echo "failse"; //批量多发 $users = ['xxx1@qq.com', 'xxx2@qq.com']; $messages = []; foreach ($users as $user) { $messages[] = Yii::$app->mailer->compose() ->setTo($user) ->setSubject('测试主题') ->setHtmlBody('测试内容'); } Yii::$app->mailer->sendMultiple($messages);
还可以模板方式,发送附件等,具体看官方文档:
https://www.yiiframework.com/doc/guide/2.0/en/tutorial-mailing