1. 程式人生 > >yii2.0郵件傳送問題

yii2.0郵件傳送問題

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版本下的報錯資訊

修改方式通過查詢得知有三種解決方案(前兩種親測有效,第三種失敗)

  1. 修改php版本,降級(不建議)
  2. 更改埠或者遮蔽ssl的使用
    1. 埠25傳送郵件
    2. 埠465傳送郵件,但是不能採用ssl方式,【‘encryption’ => ‘ssl’】這句程式碼必須註釋掉
    3. 埠587傳送郵件,方式採用tls(比較安全)
  3. 更改郵件中ssl關於證書驗證的配置
$options['ssl'] = array('verify_peer' => false, 'verify_peer_name' => false, 'allow_self_signed' => true); //沒有找到在哪修改(¬_¬)

上面解決方案中的第三種方案我還沒有找到解決方法,有知道的可以回覆我一下,謝謝!