Yii2之發送電子郵件

官方文檔:http://www.yiiframework.com/doc-2.0/guide-tutorial-mailing.htmlphp

使用Yii2框架的時候,有時候須要發送電子郵件,Yiii2提供了swiftMailer擴展來實現;html

一、swiftMailergit

Swift是一個徹底採用面向對象編碼用於發送e-mail的PHP函數庫。Swift不依賴於PHP的mail()函數,由於用它發送多封郵件時會佔用較高的服務器資源。Swift經過直接連到SMTP服務器或MTA可以更快,更高效地發送郵件。github

二、安裝:swift

https://github.com/yiisoft/yii2-swiftmailer數組

這裏有具體的安裝方法以及使用方法:服務器

a、配置:yii2

return [ 
    //.... 
    'components' => [ 
        'mailer' => [ 
            'class' => 'yii\swiftmailer\Mailer', 
            'useFileTransport' => false, 
            'transport' => [ 
                'class' => 'Swift_SmtpTransport', 
                'host' => 'smtp.163.com', 
                'username' => '***@163.com', 
                'password' => '******',    //這裏須要注意,一些郵箱若是在第三方郵箱登陸如下等服務POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV,會要求設置登陸受權碼,登陸的時候,密碼是輸的這個受權碼,這裏填寫的password也相應的是這個受權碼
                'port' => '25', 
                'encryption' => 'tls', 
            ], 
            'messageConfig'=>[ 
                'charset'=>'UTF-8', 
                'from'=>['***@163.com'=>'**客服'] 
            ], 
        ], 
    ], 
];

三、使用:app

$mail= Yii::$app->mailer->compose();
$mail->setTo('***@163.com'); //要發送的郵箱 
$mail->setSubject("郵件主題"); //郵件主題 
$mail->setTextBody('純文本內容'); //發佈純文字文本 
$mail->setHtmlBody("消息內容"); //發送的消息內容 
$res = $mail->send();

注意:批量發送的時候,只須要在setTo防範重傳入郵箱數組便可,setTo([‘mail1@mail.com’,‘mail1@mail.com’])框架

四、自定義郵件模板:

咱們在配置的時候會作一些配置,其中有一項爲

'viewPath' => '@common/mail',

所以咱們能夠在該目錄下建立新的模版文件template.php,內容本身隨便寫

而後在定義的時候:

Yii::$app->mailer->compose('template',['params'=>'參數1'])

 

即參數傳入模板文件的名稱。固然也支持傳入參數,即爲第二個參數

五、自定義layout

爲郵件定製layout,,假如layout放在common\layouts\mail下,文件爲layout.php:

Yii::$app->mailer->compose('template', [ 
    'html' => 'layout', //key固定,value是模版文件名 
    'params' => '參數1' 
]) ->setTo('**@163.com') 
   ->setSubject(*****主題') 
   ->send();

六、發送帶附件的郵件:發送郵件並以附件的形式帶上一張圖片和一個word文檔

$message = Yii::$app->mailer->compose(); 
$message->attach('圖片可訪問地址'); 
$message->attachContent('Attachment content', ['fileName' => 'test.word', 'contentType' => 'text/plain']); 
$message->setTo('***@163.com'); 
$message->setSubject('***主題'); 
$message->send();

注意:想把圖片放在郵件內容,而不是附件發送,能夠經過模板文件並傳入參數的方法實現,可是部分郵箱仍是會將圖片摘出來,以附件的形式發送

相關文章
相關標籤/搜索