2015-06-12 76 views
2

平臺:Ubuntu14.04 + XAMPP 5.5.24 \ 5.6.8 + OpenSSL的PHP 5.6.8 cerficate驗證失敗

錯誤信息,同時從PHPMailer的發送電子郵件:在一些博客

Warning: stream_socket_enable_crypto(): SSL operation failed with code 1. OpenSSL Error messages: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed in /opt/lampp/htdocs/Sentrifugo_2.0/install/PHPMailer/class.smtp.php on line 270 

我已閱讀,我們可以允許通過SMTPOptions不安全的連接,並通過與下面的子類類SMTP實現它:

$mail->SMTPOptions = array(
'ssl' => array(
    'verify_peer' => false, 
    'verify_peer_name' => false, 
    'allow_self_signed' => true 
) 
); 

我會很感激,如果任何人都可以在確認應該在哪裏支持我正在配置這個,因爲我已經搜索了class.smtp.php和class.phpmailer.php文件,但無法找到verify_peer。

此外,上線270,我發現下面的代碼在class.smtp.php:

/** 
* Initiate a TLS (encrypted) session. 
* @access public 
* @return bool 
*/ 
public function startTLS() 
{ 
    if (!$this->sendCommand('STARTTLS', 'STARTTLS', 220)) { 
     return false; 
    } 
    // Begin encrypted connection 
    if (!stream_socket_enable_crypto(
     $this->smtp_conn, 
     true, 
     STREAM_CRYPTO_METHOD_TLS_CLIENT 
    )) { 
     return false; 
    } 
    return true; 
} 

請建議 - 提前感謝

回答

4

這是覆蓋在the PHPMailer troubleshooting guide

你正在把事情搞混了。在舊版本的PHPMailer的,你只能通過繼承的SSL設置通過解決這個問題,但現在你可以通過你發佈的代碼做到這一點:這是傳遞

$mail->SMTPOptions = array(
    'ssl' => array(
     'verify_peer' => false, 
     'verify_peer_name' => false, 
     'allow_self_signed' => true 
    ) 
); 

此設置的PHPMailer的SMTPOptions財產,到stream_socket_client函數。 PHPMailer本身沒有verify_peer屬性 - 它是ssl properties of stream contexts in PHP中的一個設置。

當調用startTLS()時,該流已經附加上下文,所以當調用stream_socket_enable_crypto時,它將在創建時使用流上設置的ssl屬性。

請記住,當你選擇走這條抑制證書驗證的路線時,就會危及你的安全。

+0

感謝Synchro的信息 - 但作爲一個noob你可以請也協助我在哪裏必須輸入上述SMTPOptions代碼 - 我的意思是在哪個文件中,哪個函數以及該函數在更改後應該是什麼樣子?謝謝 – roohit80

+0

這個改變發生在你自己的代碼中,你正在使用PHPMailer。 '$ mail'只是您正在使用的PHPMailer實例的名稱。 – Synchro

+0

Synchro - 添加 - 我試圖讓Sentrifugo應用程序使用phpmailer發送電子郵件,我們的電子郵件託管在辦公室365。我甚至嘗試使用Gmail和雅虎帳戶,但仍然錯誤消息是相同的。 :( – roohit80