Yii2.0中Mailer收发邮件详解

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Yii2.0中Mailer收发邮件详解相关的知识,希望对你有一定的参考价值。

Yii2.0封装的类足够强大,Mailer的使用方法做一个总结:
1、先在main-local.php中做好配置:

return [
//....
‘components‘ => [
‘mailer‘ => [
‘class‘ => ‘yiiswiftmailerMailer‘,
],
],
];

详细如下:

return [
//....
‘components‘ => [

         ‘viewPath‘ => ‘@common/mail‘,
        ‘useFileTransport‘ =>false,//这句一定有,false发送邮件,true只是生成邮件在runtime文件夹下,不发邮件
        ‘transport‘ => [  
         ‘class‘ => ‘Swift_SmtpTransport‘, //使用的类
         ‘host‘ => ‘smtp.sina.com‘,             //邮箱服务一地址这里用的sina邮件服务器
         ‘username‘ => ‘[email protected]‘,//邮箱地址,发送的邮箱  
         ‘password‘ => ‘*******‘,  //自己填写邮箱密码
         ‘port‘ => ‘465‘,  //服务器端口
         ‘encryption‘ => ‘ssl‘, //加密方式 
           ],
        ‘messageConfig‘=>[  
                ‘charset‘=>‘UTF-8‘, //编码 
                ‘from‘=>[‘[email protected]‘=>‘管理员‘]  //邮件里面显示的邮件地址和名称
                ], 
      ],

];

2、在应用中的对应的方法中使用:

Yii::$app->mailer->compose()br/>->setFrom(‘[email protected]‘)
->setTo(‘[email protected]‘)
->setSubject(‘Message subject‘)
->setTextBody(‘Plain text content‘)
->set
htmlBody(‘HTML content‘)
->send();

3、关于在上面的例子中所述的 compose() 方法创建了电子邮件消息,这是填充和发送的一个实例,发送内容在setTextBody中传输。 如果需要的话在这个过程中你可以用上更复杂的逻辑:

$message = Yii::$app->mailer->compose();
if (Yii::$app->user->isGuest) {br/>$message->setFrom(‘[email protected]‘)
} else {
$message->setFrom(Yii::$app->user->identity->email)
}
$message->setTo(Yii::$app->params[‘adminEmail‘])
->setSubject(‘Message subject‘)
->setTextBody(‘Plain text content‘)
->send();

4、邮件发出去的内容,除了通过setTextBody中传输。在Yii 允许通过特殊的视图文件来撰写实际的邮件内容。默认情况下, 这些文件应该位于 “@app/mail” 路径的文件中,代码如下:
passwordResetToken-html.php

<?php
use yiihelpersHtml;

/ @var $this yiiwebView /
/ @var $user commonmodelsUser /

$resetLink = Yii::$app->urlManager->createAbsoluteUrl([‘site/reset-password‘, ‘token‘ => $user->password_reset_token]);
?>
<div class="password-reset">
<p>Hello <?= Html::encode($user->username) ?>,</p>

&lt;p&gt;Follow the link below to reset your password:&lt;/p&gt;

&lt;p&gt;&lt;?= Html::a(Html::encode($resetLink), $resetLink) ?&gt;&lt;/p&gt;

</div>

调用的时候代码如下(html指向上述目录中的对应html视图文件):

Yii::$app
->mailer
->compose(
[‘html‘ => ‘passwordResetToken-html‘, ‘text‘ => ‘passwordResetToken-text‘],
[‘user‘ => $user]
)
->setFrom([Yii::$app->params[‘supportEmail‘] => Yii::$app->name . ‘管理员‘])
->setTo($this->email)
->setSubject(‘密码重置‘ . Yii::$app->name)
->send();



以上是关于Yii2.0中Mailer收发邮件详解的主要内容,如果未能解决你的问题,请参考以下文章

详解收发不畅原因及U-Mail邮件中继解决之道

邮件详解

PHP Mailer:从 gmail 向 yahoo 发送邮件,无法识别代码

U-Mail邮件系统详解邮件收发延迟原因及解决方案

Rails 4.1 Mailer预览和设计自定义电子邮件

我向其发送邮件的每个用户都会重复 PHP Mailer 邮件