前些时间发送邮件时还正常,不知为何近期不能发送了,网上查找原因,终于解决,整理如下:


0、不可能的问题
超时,PHPMailer程序配置超时时间太短造成发送失败。

1、php.ini 开启相应扩展
确定 PHP 配置文件中 allow_url_fopen 项是否 开启,即为 ON。

2、是否禁用了 fsockopen 函数
查看 PHP 配置文件中 disable_functions = 中有没有 fsockopen,有的话删除。

3、相关扩展是否启用
PHP 配置文件中 php_sockets、mb_string、openssl、curl 等,如果没有,请启用。

4、端口被占用
参见参考中链接地址。(似乎,对本地邮件服务器需要考虑此问题)

5、证书不存在或无效
查看PHP证书位置(通常在Linux中使用,Win下没发现)

var_dump(openssl_get_cert_locations());

[“default_cert_file”]=>
string(21) “/usr/lib/ssl/cert.pem”
手动下载 http://curl.haxx.se/ca/cacert.pem 并替换为 /usr/lib/ssl/cert.pem
或者,使用命令,update-ca-trust 更新CA证书库(CentOS6,属于ca-certificates包)

6、其他情况
你需要开启PHPmalier调试,以便查询错误原因。

$mail->SMTPDebug = 2; // 开启客户端与服务端交互的调试
echo $email->print_debugger(); // 显示调试信息

我的情况属于 证书不存在或无效,手动下载证书文件替换后就可以正常发送了。

参考:
Linux服务器下PHPMailer发送邮件失败的问题解决
Linux使用curl访问https站点时报错汇总
Windows netstat 查看端口、进程占用
Linux查看程序端口占用情况