Yii2之发送电子邮件
程序员文章站
2022-03-18 14:55:35
官方文档:http://www.yiiframework.com/doc-2.0/guide-tutorial-mailing.html 使用Yii2框架的时候,有时候需要发送电子邮件,Yiii2提供了swiftMailer扩展来实现; 1、swiftMailer Swift是一个完全采用面向对象编 ......
官方文档:http://www.yiiframework.com/doc-2.0/guide-tutorial-mailing.html
使用Yii2框架的时候,有时候需要发送电子邮件,Yiii2提供了swiftMailer扩展来实现;
1、swiftMailer
Swift是一个完全采用面向对象编码用于发送e-mail的PHP函数库。Swift不依赖于PHP的mail()函数,因为用它发送多封邮件时会占用较高的服务器资源。Swift通过直接连到SMTP服务器或MTA能够更快,更高效地发送邮件。
2、安装:
https://github.com/yiisoft/yii2-swiftmailer
这里有具体的安装方法以及使用方法:
a、配置:
return [ //.... 'components' => [ 'mailer' => [ 'class' => 'yii\swiftmailer\Mailer', 'useFileTransport' => false, 'transport' => [ 'class' => 'Swift_SmtpTransport', 'host' => 'smtp.163.com', 'username' => '***@163.com', 'password' => '******', //这里需要注意,一些邮箱如果在第三方邮箱登录以下等服务POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV,会要求设置登录授权码,登录的时候,密码是输的这个授权码,这里填写的password也相应的是这个授权码 'port' => '25', 'encryption' => 'tls', ], 'messageConfig'=>[ 'charset'=>'UTF-8', 'from'=>['***@163.com'=>'**客服'] ], ], ], ];
3、使用:
$mail= Yii::$app->mailer->compose(); $mail->setTo('***@163.com'); //要发送的邮箱 $mail->setSubject("邮件主题"); //邮件主题 $mail->setTextBody('纯文本内容'); //发布纯文字文本 $mail->setHtmlBody("消息内容"); //发送的消息内容 $res = $mail->send();
注意:批量发送的时候,只需要在setTo防范重传入邮箱数组即可,setTo([‘mail1@mail.com’,‘mail1@mail.com’])
4、自定义邮件模板:
我们在配置的时候会做一些配置,其中有一项为
'viewPath' => '@common/mail',
因此我们可以在该目录下创建新的模版文件template.php,内容自己随便写
然后在定义的时候:
Yii::$app->mailer->compose('template',['params'=>'参数1'])
即参数传入模板文件的名称。当然也支持传入参数,即为第二个参数
5、自定义layout
为邮件定制layout,,假如layout放在common\layouts\mail下,文件为layout.php:
Yii::$app->mailer->compose('template', [ 'html' => 'layout', //key固定,value是模版文件名 'params' => '参数1' ]) ->setTo('**@163.com') ->setSubject(*****主题') ->send();
6、发送带附件的邮件:发送邮件并以附件的形式带上一张图片和一个word文档
$message = Yii::$app->mailer->compose(); $message->attach('图片可访问地址'); $message->attachContent('Attachment content', ['fileName' => 'test.word', 'contentType' => 'text/plain']); $message->setTo('***@163.com'); $message->setSubject('***主题'); $message->send();
注意:想把图片放在邮件内容,而不是附件发送,可以通过模板文件并传入参数的方法实现,但是部分邮箱还是会将图片摘出来,以附件的形式发送