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‘ => ‘[email protected]‘,//郵箱地址,發送的郵箱 ‘password‘ => ‘*******‘, //自己填寫郵箱密碼 ‘port‘ => ‘465‘, //服務器端口 ‘encryption‘ => ‘ssl‘, //加密方式 ], ‘messageConfig‘=>[ ‘charset‘=>‘UTF-8‘, //編碼 ‘from‘=>[‘[email protected]‘=>‘管理員‘] //郵件裏面顯示的郵件地址和名稱 ], ],
];
2、在應用中的對應的方法中使用:
Yii::$app->mailer->compose()->setFrom(‘[email protected]‘)
br/>->setFrom(‘[email protected]‘)
->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(‘[email protected]‘)
br/>$message->setFrom(‘[email protected]‘)
$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();
Yii2.0中Mailer收發郵件詳解