【发布时间】:2018-01-19 01:33:53
【问题描述】:
所以我有我构建的这个应用程序,它使用 PHPMailer 来发送邮件。该代码在我的本地机器上运行良好,并且直到昨天它在服务器上运行良好。但是现在当我在我的服务器上运行代码时,我得到:
无法发送邮件。邮件程序错误:SMTP 连接()失败。 https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting
我确实尝试了所有方法。我无法弄清楚为什么这不起作用。从作为站点安装用户的服务器,我可以telnet localhost 465 和telnet 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 无法验证它呢?文档没有涵盖这一点。