我在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证书或缺少什么是抱怨的?
答案 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邮件服务器端点托管的证书(如果有)有关。