PHPMailer生成PHP警告:stream_socket_enable_crypto():对等证书与预期不匹配

把服务器php 版本升级到php8.1之后 PHPMailer发送公司邮件程序报错 公司邮箱是iredmail 搭建的.

SMTP Error: Could not connect to SMTP host. Connection failed. stream_socket_enable_crypto(): SSL operation failed with code 1. OpenSSL Error messages:error:14090086:SSL routines:ssl3_get_server_certificate:certificate verify failed

php5.几和客户端都不会报错,都能正常发送


找了一个初步的解决方案 忽略证书

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


这样觉的有点不好

从iredmail 服务器上把iRedmail.crt拉下来

$mail->SMTPOptions =array ('ssl' => array('cafile'=>'/home/www/iRedmail.crt'));

强行指定证书试了可以发送邮件


到这里发现不对了,有没有可能iredmail 的ssl 证书不对

我发现因为邮箱服务器对外网是nginx跳转到这个iredmail服务器 iredmail服务器并没有更换证书 用的是自签证书

  • 将公司的域名证书和密钥改名为iRedMail.crt和iRedMail.key,然后覆盖/etc/pki/tls/certs/iRedMail.crt 和 /etc/pki/tls/private/iRedMail.key

  • 重启nginx: systemctl restart nginx

  • 最后竟然搞定了







发表评论 / Comment

用心评论~