PHPMailer 5.2 OpenSSL错误消息:错误:14090086:SSL例程:SSL3_GET_SERVER_CERTIFICATE:证书验证失败

时间:2017-01-06 18:16:08

标签: php email ssl phpmailer

我在PHP 5.6服务器上使用PHPMailer收到此错误。

警告:stream_socket_enable_crypto():SSL操作失败,代码为1. OpenSSL错误消息:错误:14090086:SSL例程:SSL3_GET_SERVER_CERTIFICATE:证书验证在第344行的class.smtp.php中失败

有趣的是,我正在尝试通过本地SMTP服务器@ localhost发送电子邮件,而我没有使用SSL或TLS - 它是端口25上的普通SMTP。

$mail->SMTPSecure=''
$mail->SMTPPort //not set

服务器已为网站域安装了有效的SSL证书。

我已经在GitHub上阅读了有关PHP 5.6证书验证失败的文档,它似乎没有解决这个问题。

我添加了此代码,但仍然收到错误:

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

我想主要的问题是,SSL证书或缺少什么是抱怨的?

1 个答案:

答案 0 :(得分:1)

PHPMailer' github页面mentions此类错误:

  

故障排除文档中对此进行了介绍。 PHP 5.6默认情况下验证SSL证书,如果您的证书不匹配,它将失败并显示此错误。正确的解决方案是修复您的SSL配置 - 这不是PHP的错!

我发现您已经解决了使PHPMailer设置不安全的问题,因为troubleshooting docs不推荐。您是否注意到需要PHPMailer 5.2.10?

  

正确的解决方法是用一个好的证书替换无效,配置错误或自签名的证书。如果不这样做,您可以通过PHPMailer 5.2.10中引入的SMTPOptions属性允许不安全的连接(可以通过在早期版本中继承SMTP类来实现此目的),但不推荐这样做

还有enabling debug output的建议:

$mail->SMTPDebug = 4;

如果查看调试输出,可能会收集更多有用的信息。

编辑:这也与您的网站的证书无关,它与您的SMTP邮件服务器端点托管的证书(如果有)有关。