yii2.0郵件傳送問題
阿新 • • 發佈:2018-11-02
yii2.0郵件傳送問題
首先貼出我傳送郵件的原始碼
$mail= Yii::$app->mailer->compose();
$mail->setFrom(['[email protected]'=>$from]);
$mail->setTo($to);
if($cc){
$mail->setCc($cc);
}
$mail->setSubject($subject);
$mail->setHtmlBody($body);//釋出可以帶html標籤的文字
$mail->send();
這裡我用的是yii2.0支援的swift_mailer外掛
配置檔案中配置為
return [
'components' => [
'mailer' => [
'class' => 'yii\swiftmailer\Mailer',
'useFileTransport' =>false,//這句一定有,false傳送郵件,true只是生成郵件在runtime資料夾下,不發郵件
'transport' => [
'class' => 'Swift_SmtpTransport' ,
'host' => '127.0.0.1',
'username' => 'xx',
'password' => 'xxx',
'port' => 465,
'encryption' => 'ssl',
],
'messageConfig'=>[
'charset' =>'UTF-8',
'from'=>['[email protected]'=>'哈哈']
],
],
],
];
當然,這個配置在PHP版本5.5環境下可以正常傳送郵件,在5.6環境下卻不可以傳送郵件,這是因為PHP版本升級時變更了OpenSSL。
Exception 'Swift_TransportException' with message 'Connection could not be established with host 127.0.0.1 [ #0]'
in \vendor\swiftmailer\swiftmailer\lib\classes\Swift\Transport\StreamBuffer.php:271
這是5.6版本下的報錯資訊
修改方式通過查詢得知有三種解決方案(前兩種親測有效,第三種失敗)
- 修改php版本,降級(不建議)
- 更改埠或者遮蔽ssl的使用
- 埠25傳送郵件
- 埠465傳送郵件,但是不能採用ssl方式,【‘encryption’ => ‘ssl’】這句程式碼必須註釋掉
- 埠587傳送郵件,方式採用tls(比較安全)
- 更改郵件中ssl關於證書驗證的配置
$options['ssl'] = array('verify_peer' => false, 'verify_peer_name' => false, 'allow_self_signed' => true); //沒有找到在哪修改(¬_¬)
上面解決方案中的第三種方案我還沒有找到解決方法,有知道的可以回覆我一下,謝謝!