【问题标题】:PHP Mailer "Warning: stream_socket_enable_crypto():" ErrorPHP Mailer“警告:stream_socket_enable_crypto():”错误
【发布时间】:2017-10-03 15:06:42
【问题描述】:

我的 PHPMailer 存在持续的 SMTP 问题,如下所述:https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting#php-56-certificate-verification-failure

我查看了给出的错误,据我所知,这是罪魁祸首

警告:stream_socket_enable_crypto(): Peer certificate CN=*.mywebhost.com' did not match expected CN=mail.mydomain.com' in /path/to/phpmailer/class.smtp.php on line 355

其他想法/信息。

  1. 我已经安装了 SSL,我已经在这里验证了它的合法性:https://www.digicert.com/help/
  2. 这是一个共享托管环境。
  3. 这是一个 PHP 7 环境。
  4. 这是一个子域设置。因此,SSL 适用于 sub.mydomain.com$mail->Hostma​​il.mydomain.com。我不知道这是否相关,但就是这样。

我已经阅读了 PHPMailer 文档,但我不知道为什么仍然会发生这种情况。有效的 SSL,没有 SMTP ......关于我可以在哪里检查以解决此问题的任何想法?

【问题讨论】:

  • 除非您有通配符证书,否则sub.mydomain.com 的证书不适用于mail.mydomain.com。从 php 5.6 开始,它开始验证证书 [src and options to fix/bypass]
  • 那个链接很糟糕,完全不清楚。整个问题都包含在问题和错误消息中链接到的 PHPMailer 故障排除指南中。
  • 啊,这就是我通过谷歌搜索错误消息而不是单击帖子中的链接所得到的。 :-D
  • @Synchro:我没有收到 PHPMailer 文档中引用的 SSL operation failed with code 1. 错误。接下来我应该看哪里?

标签: php ssl phpmailer


【解决方案1】:

你大概有这一套:

$mail->Host = 'mail.mydomain.com';

但是当你连接到它时,它实际上连接到你的 ISP 的邮件主机(可能类似于mail.mywebhost.com,它提供*.mywebhost.com 证书),所以当然你所拥有的服务器证书上的名称确实如此不匹配。正确的解决方案是更改您的Host 属性以使用邮件服务器的真实名称,因为这样证书将匹配,并且您不会出现不匹配错误:

$mail->Host = 'mail.mywebhost.com';

(您需要找出确切的名称应该是什么)。要使用您自己的证书,您需要在自己的 IP 上运行自己的邮件服务器,这是您不太可能在共享主机上获得的。

故障排除指南中还描述了另一种解决方法是禁用证书验证(就像 5.6 之前的 PHP 所做的那样) - 但您不应该这样做。你知道为什么会失败,所以你应该正确地修复它,而不是简单地抑制错误。

【讨论】:

  • 我试过了,得到了SMTP ERROR: Failed to connect to server: No route to host (113)。也许问题与在子域上安装了 SSL 的事实有关,但主域现在没有 SSL。我正在努力纠正这个问题,但这似乎会导致给定的问题吗?
  • 没有。 SSL 是关于接收者的,而不是客户端。该错误意味着您的服务器名称错误或您的出站 SMTP 被阻止。请咨询您的 ISP。
  • 经过更多研究,似乎“esmtpsa”部分表明 TLS/SMTP 连接成功 (hmailserver.com/forum/viewtopic.php?t=25998#p157973)。对吗?
猜你喜欢
  • 2018-03-07
  • 2015-08-03
  • 2013-02-05
  • 1970-01-01
  • 2017-11-29
  • 2017-06-24
  • 1970-01-01
  • 2016-08-18
相关资源
最近更新 更多