我在PHP5.6上使用PHPMailer,在PHP5.6中围绕认证增加的安全性当然是有趣的。
我正在尝试发送一个测试消息到dreamhost上的一个域,从PHPMailer返回的错误是:无法连接到SMTP主机。
这个错误是不正确的,我已经启用了日志记录,下面是实际发生的情况。
连接:打开到mx1.sub4.homie.mail.dreamhost.com:25,超时=30,选项=数组()连接:已打开S:220 homiemail-mx32.g.dreamhost.com ESMTP
C:亿豪s81a.ikbb.com
S:250-homiemail-mx32.g.dreamhost.com 250-管道250-大小40960000 250-ETRN 250-启动250-增强的状态代码250 8位MIME
C:星星
S:220 2.0.0准备启动TLS
C:退出
S:SMTP错误:QUIT命令失败:连接方式:封闭的
我不明白为什么PHPMailer在应该开始发送消息的时候却放弃了,发出了一个QUIT命令。我从另一个日志中得到了另一个线索:
PHP警告:数据流套接字启用加密():对等凭证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));
如果我把SMTPOnices放在那里,跳过对等验证,消息就正常了--PHP中根本没有警告。
如何捕获该错误,以便在知道存在问题的情况下仍发送消息?
8条答案
按热度按时间iqjalb3h1#
我遇到了同样的问题,我在PHPMailer documentation中找到了答案。
PHP 5.6证书验证失败
PHP 5.6在SSL连接上验证证书,如果你连接的服务器的SSL配置不正确,你会得到如下错误:
**正确的解决方法是用一个好的证书替换无效的、配置错误的或自签名的证书。**如果做不到这一点,您可以通过PHPMailer 5.2.10中引入的SMTPOnices属性允许不安全的连接(在早期版本中,可以通过将SMTP类子类化来实现这一点),但不建议这样做:
您也可以在php.ini中全局地更改这些设置,但这确实不是一个好主意; PHP 5.6做这个改变有很好的理由。
有时候这种行为并不十分明显;有时,加密失败可能会显示为客户端在尝试执行STARTTLS后立即发出QUIT。2如果您看到这种情况,您应该检查证书或验证设置的状态。
c9qzyr3d2#
WHM/cPanel的解决方案:通过以下过程禁用SMTP限制***:
**a)打开WHM,搜索SMTP限制*,确保它被禁用。(您也可以直接通过***主页安全中心SMTP限制***)
B)****或通过***调整设置***(直接进入***主页服务器配置调整设置***或您可以单击上图所示的调整设置链接)完成相同的操作
bqf10yzr3#
对于那些使用cPanel的人,我尝试了PHPMailer中examples文件夹中的SMTP check code,但我得到了同样的错误:
我意识到这不是一个与PHPMailer相关的错误,所以我搜索了与CentOS相关的类似错误,我发现了以下链接,它提供了一些线索:Issue sending mails through 3rd party。您必须查看cPanel中的“SMTP限制”。
wvyml7n54#
禁用WHM中的SMTP限制
yqyhoc1h5#
对于PHP 5.6,使用以下代码。添加“tls://”是关键字。
请参阅:http://php.net/manual/en/context.ssl.php
ndh0cuux6#
我在我的WordPress机器上升级到PHP 5.6后遇到了类似的问题。WP Mail SMTP by WPForms(wp-mail-smtp)插件被配置为使用localhost作为SMTP主机。我已经将其更改为FQHN(完全合格的主机名),因为它在SSL证书中定义。更改后,它工作正常。
rks48beu7#
正如有人在这里提到的,问题是一个无效的SSL证书。您的网站可能有一个有效的SSL证书,但它可能不适用于
mail.website.net
或smtp.website.net
子域。如果您的主机提供商有一个接口为您的网站生成SSL证书,尝试搜索是否有一个选择子域的可能性,证书将生成。rsaldnfx8#
如果您刚迁移到另一台服务器,很可能可以通过禁用WHM的SMTP限制来解决此问题: