【问题标题】:PHPMailer all of the sudden not workingPHPMailer突然不工作了
【发布时间】:2018-01-19 01:33:53
【问题描述】:

所以我有我构建的这个应用程序,它使用 PHPMailer 来发送邮件。该代码在我的本地机器上运行良好,并且直到昨天它在服务器上运行良好。但是现在当我在我的服务器上运行代码时,我得到:

无法发送邮件。邮件程序错误:SMTP 连接()失败。 https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting

我确实尝试了所有方法。我无法弄清楚为什么这不起作用。从作为站点安装用户的服务器,我可以telnet localhost 465telnet localhost 587,所以服务器已启动,并且它不会阻止与自身的连接。

我唯一能想到的是,这是一个 Cpanel 服务器,一定是 apache/PHP 发生了某种更新,导致某些东西无法正常工作。我知道问题不在于邮件服务器,也不在于代码(因为当我从本地机器运行这个确切的代码时它可以工作),它只遗漏了服务器上的 PHP/Apache 配置......

有没有人知道这可能是什么?

PS- 我必须使用 SSL,这是我所知道的我的服务器唯一支持的东西,至少我从来没有使用过 TLS 或未加密的运气。

这是我的代码:

require("vendor/autoload.php");
$mail = new \PHPMailer;
// set up mail settings
$mail->isSMTP();
$mail->Host = 'my.host.com';
$mail->SMTPAuth = true;
$mail->Username = 'username';
$mail->Password = 'password';
$mail->SMTPSecure = 'ssl';
$mail->Port = 465;

$mail->Debugoutput = function($str, $level) {
    $GLOBALS['debug'][] = $Host . " - " . $str . " - " . $level;
};

$mail->SMTPDebug = 2;
$mail->CharSet = "UTF-8";
$mail->setFrom(.....);
$mail->addAddress(.....);
$mail->isHTML(true);
$mail->Subject = 'Here is the subject';
$mail->Body    = '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional //EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html><body>This is the HTML message body <b>in bold!</b></body></html>';

if(!$mail->send()) {
    echo 'Message could not be sent.';
    echo 'Mailer Error: ' . $mail->ErrorInfo;
} else {
    echo 'Message has been sent';
}

编辑:

我将调试级别更改为 3(用于连接调试,derp),我得到了这个:

[0]=> string(88) " - 连接:打开到 ssl://host.host.com:465, timeout=300, options=array ( ) - 3"

[1]=> string(291) " - 连接失败。错误 #2:stream_socket_client():SSL 操作失败,代码为 1。OpenSSL 错误消息:错误:14090086:SSL 例程:ssl3_get_server_certificate:证书验证失败 [/ path/to/vendor/phpmailer/phpmailer/class.smtp.php line 294] - 3"

[2]=> string(175) " - 连接失败。错误 #2:stream_socket_client(): 无法启用加密 [/path/to/vendor/phpmailer/phpmailer/class.smtp.php 第 294 行] - 3"

[3]=> string(215) " - 连接失败。错误 #2:stream_socket_client():无法连接到 ssl://my.host.com:465(未知错误)[/path/to/供应商/phpmailer/phpmailer/class.smtp.php 第 294 行] - 3"

[4]=> string(52) " - SMTP 错误:无法连接到服务器:(0) - 1"

[5]=> string(89) " - SMTP connect() 失败。https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting - 3" }

所以我是对的,它与 SSL 相关......所以有人知道如何解决这个问题吗?

【问题讨论】:

  • 为什么投反对票?
  • 下一个合乎逻辑的步骤是用谷歌搜索你的错误。同样,如果您没有更改任何内容,也许您的电子邮件提供商更改了其设置?还是你自己的服务器?您是否尝试过简单地将加密设置为“tls”?
  • 是的,我正在谷歌上搜索它。我知道我可以通过 ssloptions 解决这个问题,但我更愿意让证书链正常工作。我正在等待服务器人员的回复。
  • 如果您阅读错误消息链接到的故障排除指南,您会发现它详细描述了这个问题以及如何解决它。
  • 没有说明如何解决。当然,它提供了一些帮助,但是运行 openssl 命令行命令实际上表明我的邮件服务器证书上的验证是有效的,那么为什么 PHP/openssl 无法验证它呢?文档没有涵盖这一点。

标签: php email phpmailer


【解决方案1】:

不久前我们的一个直播网站也发生了完全相同的事情。花了几个小时对代码进行故障排除(我们也在使用 PHPMailer),但它最终成为数据中心的防火墙更新。检查您的 cPanel 设置和/或向您的托管服务提供商开票。

如果您没有对代码进行任何更改,但它突然停止工作,则很可能不是您的代码有问题。就我而言,是服务器防火墙阻止了出站连接。调查一下。

【讨论】:

  • 我正在与我的提供商合作解决这个问题,但是我已经验证这不是防火墙问题,我什至编写了一个 php 脚本来打开与同一主机和端口的套接字连接,它返回 true,因此 PHP 能够打开与我在配置中使用的主机和端口的套接字连接。它必须是 SSL 协商。
  • 您是否尝试过使用 PHPMailer 进入详细调试模式?
  • 天啊,我从来没有意识到调试级别比 2 更高。3 是我需要的。请参阅对问题的编辑以获取更新!谢谢!
  • 其实也有4个,我想也是5个。虽然文档没有提到它们。
  • 这在技术上是我问题的答案,认为真正的问题完全是另一个问题。感谢您的帮助。
猜你喜欢
  • 2014-08-05
  • 1970-01-01
  • 2019-11-09
  • 2017-11-07
  • 2019-03-16
  • 2014-04-16
  • 1970-01-01
  • 1970-01-01
  • 2017-08-09
相关资源
最近更新 更多