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

return [ //.... 'components' => [ 'mailer' => [ 'class' => 'yii\swiftmailer\Mailer', ], ], ];

详细如下:

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

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

Yii::$app->mailer->compose()->setFrom('from@domain.com')->setTo('to@domain.com')->setSubject('Message subject')->setTextBody('Plain text content')->setHtmlBody('HTML content')->send();

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

$message = Yii::$app->mailer->compose(); if (Yii::$app->user->isGuest) {$message->setFrom('from@domain.com') } 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 yii\helpers\Html;

/* @var $this yii\web\View / / @var $user common\models\User */

$resetLink = Yii::$app->urlManager->createAbsoluteUrl(['site/reset-password', 'token' => $user->password_reset_token]); ?> <div class="password-reset"> <p>Hello <?= Html::encode($user->username) ?>,</p><p>Follow the link below to reset your password:</p><p><?= Html::a(Html::encode($resetLink), $resetLink) ?></p> </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();