2015-06-12 40 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