作者:白狼 出處:http://www.manks.top/article/yii2_swiftMailer本文版權歸作者,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。
yii2中官方為了解決郵件發送問題,提供了swiftMailer擴展。
我們先來了解下什么是swiftMailer。
Swift是一個完全采用面向對象編碼用於發送e-mail的PHP函數庫。Swift不依賴於PHP的mail()函數,因為用它發送多封郵件時會占用較高的服務器資源。Swift通過直接連到SMTP服務器或MTA能夠更快,更高效地發送郵件。
官方文檔上做出了簡單的使用說明。我們也來參考下。
1、利用composer進行安裝
php composer.phar require --prefer-dist yiisoft/yii2-swiftmailer
2、配置
return [ //.... 'components' => [ 'mailer' => [ 'class' => 'yii\swiftmailer\Mailer', 'viewPath' => '@common/mail', // send all mails to a file by default. You have to set // 'useFileTransport' to false and configure a transport // for the mailer to send real emails. 'useFileTransport' => false, 'transport' => [ 'class' => 'Swift_SmtpTransport', 'host' => 'smtp.163.com', 'username' => '***@163.com', 'password' => '******', 'port' => '25', 'encryption' => 'tls', ], 'messageConfig'=>[ 'charset'=>'UTF-8', 'from'=>['***@163.com'=>'白狼棧'] ], ], ], ];
3、簡單使用
$mail= Yii::$app->mailer->compose(); $mail->setTo('***@qq.com'); //要發送給那個人的郵箱 $mail->setSubject("郵件主題"); //郵件主題 $mail->setTextBody('測試text'); //發布純文字文本 $mail->setHtmlBody("測試html text"); //發送的消息內容 var_dump($mail->send());
測試發現$mail->setHtmlBody()發送郵件可以發送成功。但是$mail->setTextBody()不知道為啥試了10來次都沒收到,回頭我再試試。
4、我們看看怎么批量發送郵件
$users = ['***@qq.com', '******@qq.com']; $messages = []; foreach ($users as $user) { $messages[] = Yii::$app->mailer->compose() ->setTo($user) ->setSubject('測試主題') ->setHtmlBody('測試內容'); } Yii::$app->mailer->sendMultiple($messages);
5、定義郵件模版,這樣我們就可以更方便的構建我們的郵件模板了
在步驟2中我們定義了viewPath指向common\mail。因此我們可以在該目錄下創建新的模版文件test.php,內容自己隨便定義就好。
然后看看程序中怎么實現發送郵件
$res = Yii::$app->mailer->compose('test') ->setTo('*******@qq.com') ->setSubject('Message subject') ->send(); var_dump($res); //true
我們只需要在compose的第一個參數上填寫該模版的文件名即可。
注:我這里是偶爾發到qq的垃圾箱去了,大家測試的時候也記得去查看。
實際上比如找回密碼等內容時,內容基本上都是動態不定的,也就是說我們怎么實現傳參呢?
這個也是很簡單,只需要指定compose的第二個參數即可
//controller代碼 Yii::$app->mailer->compose('test', ['title' => '測試']) ->setTo('422744746@qq.com') ->setSubject('Message subject') ->send(); //test.php <h2><?= $title ?></h2>
6、你也可以為你的郵件定制layout,布局文件這里放到common\mail\layouts目錄下面即可。
現在我們有一個布局文件html.php,我們看看怎么利用布局文件發郵件。
Yii::$app->mailer->compose('test', [ 'html' => 'html', //key固定,value是模版文件名 'title' => 333 ]) ->setTo('422744746@qq.com') ->setSubject('Message subject') ->send();
7、我們看看如何發送帶附件的郵件
我們舉一個發送郵件並以附件的形式帶上一張圖片和一個txt文本內容試試看