使用PHPMailer 中的报错解决 "Connection failed. Error #2: stream_socket_client(): SSL operation failed w

Posted wpjamer

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用PHPMailer 中的报错解决 "Connection failed. Error #2: stream_socket_client(): SSL operation failed w相关的知识,希望对你有一定的参考价值。

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 w的主要内容,如果未能解决你的问题,请参考以下文章

Ruby之Rspec的报错解决

解决sever 2008中tomcat的报错 init Failed to initialize end point associated with ProtocolHandler ["

记录一次Sqlserver数据库订阅与发布过程中的报错解决过程

vc编译中的报错syntax error : 'constant'

vue中"‘webpack-dev-server’不是内部或外部命令,也不是可运行的程序"的报错

kettle的报错解决机制