PHPMailer突然不工作

问题描述:

所以我有这个应用程序,我建立了使用PHPMailer发送邮件。该代码完全可以从我的本地机器上运行,并且直到昨天才在服务器上完美运行。然而,现在当我在我的服务器上运行代码时,我得到:PHPMailer突然不工作

消息无法发送.Mailer错误: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] =>串(88)“ - 连接:打开到ssl://host.redf1sh.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 ] =>字符串(175)“ - 连接失败。错误#2:stream_socket_client():无法启用加密[/path/to/vendor/phpmailer/phpmailer/class.smtp.php line 294] - 3“

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

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

[5] =>串(89)“ - SMTP连接()失败。 https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting - ?3" }

所以我是正确的,它的SSL相关的...所以任何人都知道如何解决这个

+0

为什么选择投票? – SublymeRick

+0

接下来的逻辑步骤就是Google对你的错误进行一点处理。同样,如果您没有更改任何内容,也许您的电子邮件提供商更改了其设置?或者它是你自己的服务器?你有没有尝试简单地将加密设置为'tls'? – GregKos

+0

是的,我用Google搜索它。我知道我可以通过ssloptions过去,但我宁愿让证书链工作。我在等待服务器人员的回音。 – SublymeRick

确切的同样的事情发生与我们的生活地点之一而回,花了几天。我们正在使用PHPMailer进行故障排除,但它最终成为了数据中心的防火墙更新。检查您的cPanel设置和/或与您的托管服务提供商一起打开一张票

如果您没有对数据中心进行更新,不会改变你的代码中的任何东西,它突然停止工作,这很可能不是你的代码的问题。就我而言,它是服务器防火墙阻止出站连接。研究一下。

+0

我正与我的提供者在这个,howerver我已经验证,它不是防火墙问题,我甚至写了一个PHP脚本来打开套接字连接到相同的主机和端口,并且它返回true,所以PHP能够打开一个套接字连接到我在我的配置中使用的主机和端口。它必须进行SSL协商。 – SublymeRick

+0

您是否尝试过使用PHPMailer进行详细的调试模式? – GregKos

+0

OMG我从来没有意识到有比2更高的调试级别。3是我所需要的。请参阅编辑以提出更新问题!谢谢! – SublymeRick