我在PHP 5.6上使用PHPMailer,在PHP 5.6中获得认证的增加的安全性当然很有趣.
我正在尝试向dreamhost上托管的域发送测试消息,PHPMailer返回的错误是:无法连接到SMTP主机.
这个错误不对,我已启用日志记录,这里是实际发生的事情.
连接:打开到mx1.sub4.homie.mail.dreamhost.com:25,timeout = 30,options = array()连接:打开S:220 homiemail-mx32.g.dreamhost.com ESMTP
C:EHLO s81a.ikbb.com
S:250-homiemail-mx32.g.dreamhost.com 250-PIPELINING 250-SIZE 40960000 250-ETRN 250-STARTTLS 250-ENHANCEDSTATUSCODES 250 8BITMIME
C:STARTTLS
S:220 2.0.0准备启动TLS
C:退出
S:SMTP错误:QUIT命令失败:连接:已关闭
我无法理解为什么PHPMailer只是放弃,在应该开始发送消息时发出QUIT命令.我从另一个日志中获得了另一条线索:
PHP警告:stream_socket_enable_crypto():对等证书CN = *.mail.dreamhost.com' did not match expected CN=mx1.sub4.homie.mail.dreamhost.com'在/home/ikbb/domains/dev.ikbb.com/public_html/includes/phpmailer/5.2.10/class.smtp .PHP
如果我使用一些自定义选项来阻止验证他们正在使用的证书,我可以让它继续.这是我有的:
$mail->SMTPOptions = array (
'ssl' => array(
'verify_peer' => false,
'verify_peer_name' => false,
'allow_self_signed' => true));
Run Code Online (Sandbox Code Playgroud)
如果我将SMTPOptions放在那里并跳过对等验证,则消息正常 - 在PHP中根本没有警告.
我如何捕获该错误,所以我知道存在问题但仍然发送消息?