PHPMailer也可能需要证书

这只是自己遇到问题的一个记录,并没有什么价值

前几天我的一个工具产品数字绘突然出现了一个问题,账户激活和找回密码的邮件系统突然不能用了,报错

SMTP ERROR: Failed to connect to server: (0)SMTP connect() failed. https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting

我使用的是阿里云的SMTP邮件推送(系统小,每天200封免费邮件,划算)突然出现,我的开发环境没有问题,试了阿里云的官方Python示例程序也没有问题,只有部署上去有问题,我还以为是阿里云的ECS或者邮件服务突然又什么奇怪的政策呢,提交了工单没理我,只好自己折腾。

PHPMAailer的报错并不能提供什么信息,只好看源码,发现是使用stream_socket_client连的邮件服务器,就做了一个测试例子

<?php
$fp = stream_socket_client("ssl://smtpdm.aliyun.com:465", $errno, $errstr, 30);
if (!$fp) {
echo "$errstr ($errno)<br />\n";
} else {
fclose($fp);
}
?>

这才把错误暴露出来

OpenSSL Error messages: error:1416F086:SSL routines:tls_process_server_certificate:certificate verify failed

证书认证失败,解决方法就是配置证书了:

  1. 下载证书
  2. 打开 php.ini 找到里面的openssl.cafile,取消注释,修改为openssl.cafile=证书保存的地址。
  3. 重启Web服务

其实弄好了之后还是有个疑问,为什么以前没有配没啥问题,突然就需要了呢。

加载评论框需要翻墙