码迷,mamicode.com
首页 > Web开发 > 详细

使用PHPMailer 中的报错解决 "Connection failed. Error #2: stream_socket_client(): SSL operation failed with code 1. OpenSSL Error messages:"

时间:2017-08-24 10:38:29      阅读:827      评论:0      收藏:0      [点我收藏+]

标签:问题   sign   str   and   可见   openssl   fail   message   难解   

PHPMailer项目地址:https://github.com/PHPMailer/PHPMailer

项目中用到PHPMailer,使用过程中报错:"Connection failed. Error #2: stream_socket_client(): SSL operation failed with code 1. OpenSSL Error messages:"

由于我用的第三方smtp是ssl链接,所以需要再添加一些参数:

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

官方是这样说明的:"

This is covered in the troubleshooting docs. PHP 5.6 verifies SSL certificates by default, and if your cert doesn‘t match, it will fail with this error. The correct solution is to fix your SSL config - it‘s not PHP‘s fault!

If you‘re sending on localhost you can use isMail() and it won‘t go through an encryption layer at all."

翻译如下:

疑难解答文档中介绍了这一点。默认情况下,PHP 5.6验证SSL证书,如果您的证书不匹配,则会出现此错误。正确的解决方案是修复您的SSL配置 - 这不是PHP的错误! 如果您正在本地发送,您可以使用isMail(),而不会通过加密层。

 

可是,我用的是php7.1啊!可见,php7及以上版本保留了php5.6这一特点。加了上述参数后问题解决了。

不过,官方的建议是,为了安全起见,还是建议大家效验ssl证书的。关于PHP是如何效验ssl证书的,请参考:https://secure.php.net/manual/en/context.ssl.php

 

在PHPMailer里效验证书的方法,是有给出配置的:

$mail->SMTPOptions = array (
    ‘ssl‘ => array(
        ‘verify_peer‘  => true,
        ‘verify_depth‘ => 3,
        ‘allow_self_signed‘ => true,
        ‘peer_name‘ => ‘smtp.example.com‘,
        ‘cafile‘ => ‘/etc/ssl/ca_cert.pem‘,
    )
);

 

出处:https://github.com/PHPMailer/PHPMailer/issues/368

使用PHPMailer 中的报错解决 "Connection failed. Error #2: stream_socket_client(): SSL operation failed with code 1. OpenSSL Error messages:"

标签:问题   sign   str   and   可见   openssl   fail   message   难解   

原文地址:http://www.cnblogs.com/wpjamer/p/7421304.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!