Yii2之发送电子邮件

官方文档:http://www.yiiframework.com/doc-2.0/guide-tutorial-mailing.htmlphp

使用Yii2框架的时候,有时候须要发送电子邮件,Yiii2提供了swiftMailer扩展来实现;html

一、swiftMailergit

Swift是一个彻底采用面向对象编码用于发送e-mail的PHP函数库。Swift不依赖于PHP的mail()函数,由于用它发送多封邮件时会占用较高的服务器资源。Swift经过直接连到SMTP服务器或MTA可以更快,更高效地发送邮件。github

二、安装:swift

https://github.com/yiisoft/yii2-swiftmailer数组

这里有具体的安装方法以及使用方法:服务器

a、配置:yii2

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'=>'**客服'] 
            ], 
        ], 
    ], 
];

三、使用:app

$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’])框架

四、自定义邮件模板:

咱们在配置的时候会作一些配置,其中有一项为

'viewPath' => '@common/mail',

所以咱们能够在该目录下建立新的模版文件template.php,内容本身随便写

而后在定义的时候:

Yii::$app->mailer->compose('template',['params'=>'参数1'])

 

即参数传入模板文件的名称。固然也支持传入参数,即为第二个参数

五、自定义layout

为邮件定制layout,,假如layout放在common\layouts\mail下,文件为layout.php:

Yii::$app->mailer->compose('template', [ 
    'html' => 'layout', //key固定,value是模版文件名 
    'params' => '参数1' 
]) ->setTo('**@163.com') 
   ->setSubject(*****主题') 
   ->send();

六、发送带附件的邮件:发送邮件并以附件的形式带上一张图片和一个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();

注意:想把图片放在邮件内容,而不是附件发送,能够经过模板文件并传入参数的方法实现,可是部分邮箱仍是会将图片摘出来,以附件的形式发送

相关文章
相关标签/搜索