yii2發送郵件教程


作者:白狼 出處: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文本內容試試看

繼續閱讀


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM