当请求来自浏览器时,SMTP connect()失败

我有一个使用PHPMailer库发送电子邮件的PHP脚本。 当我使用PHP命令在SSH中运行脚本时,它完美地发送电子邮件。 但是,当同一个脚本的请求来自浏览器时,它是失败的,并给出以下错误。

2016-12-17 19:41:24 SMTP ERROR: Failed to connect to server: (0) 2016-12-17 19:41:24 SMTP connect() failed. https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting error 

我不确定是什么导致它不适用于浏览器请求。

我的脚本在AWS上,我正在使用谷歌商业电子邮件。

以下是我的代码片段。

 require_once 'PHPMailer-master/PHPMailerAutoload.php'; $mail = new PHPMailer(); $mail->IsSMTP(); $mail->SMTPAuth = true; $mail->IsHTML(true); $mail->CharSet = "text/html; charset=UTF-8;"; $mail->SMTPDebug = 2; $mail->SMTPSecure = 'ssl'; $mail->Host = "smtp.gmail.com"; $mail->Port = 465; $mail->Username = "google email address"; $mail->Password = "password"; $mail->From = $email_from; $mail->FromName = "Name"; $mail->AddAddress($to); $mail->Subject = $subject; $mail->Body = $message; $sent = $mail->Send(); 

我将不胜感激任何帮助。 谢谢。

编辑:我已经设法解决“模块curl”已经加载在未知的行0“问题。 服务器中有2个PHP.ini文件导致了这个问题。 重命名一个PHP.ini解决了curl加载的问题。

但仍然无法使用无人用户发送电子邮件。 不过,我可以使用root用户发送电子邮件。

我注意到在WHM中的一个configuration是“防止”没有人“发送邮件”。 默认情况下,这意味着没有人不允许发送电子邮件。 所以,如果我把它关掉,我应该可以使用任何人发送电子邮件。 但不知道为什么closures后仍然无法使用无人用户发送电子邮件。

编辑:当我检查Apache服务器日志,我发现下面的错误是从浏览器来的每个请求生成。 不知道这个错误是什么。 我正在研究这个。 如果有人知道这个问题,我将不胜感激。 谢谢! ******************错误日志****************************** * [12月20日星期二12:38:45.875892 2016] [ssl:错误] [pid 913](101)networking无法访问:[客户端xx.xx.xx.xx:151] AH01974:无法连接到OCSP响应者的ocsp .comodoca.com'[Tue Dec 20 12:38:45.875929 2016] [ssl:error] [pid 913] AH01941:stapling_renew_response:responder error [Tue Dec 20 12:38:46.181171 2016] [ssl:error] [pid 919 ](101)networking不可达:[client xx.xx.xx.xx:848] AH01974:无法连接到OCSP响应者'ocsp.comodoca.com'[Tue Dec 20 12:38:46.181211 2016] [ssl:error ] [pid 919] AH01941:stapling_renew_response:响应者错误


谢谢你的帮助!

你在ssh上以root身份运行php吗? 还是另一个用户比Web服务器有更高的权限?

如果您知道Web服务器正在运行的用户,请尝试以该用户身份运行php脚本。 您可以使用phpinfo()来找出它正在运行的用户。 以该用户身份运行脚本的一种方法如下:首先是root用户或可以执行sudo的用户,然后input以下内容以切换到Web服务器用户:

 sudo -u www-data bash 

很显然,如果不同的话,用万维网服务器用户的名字replacewww-data ,如果你没有bash,在你的服务器上bash一个有效的shell。 一个你有Web服务器用户的bash提示符,运行id来检查你确实是正确的用户,然后尝试从该用户的命令行运行你的PHP脚本。 如果它给出相同的错误,那么它必须是权限问题。 如果有效,那么至less你排除了!

如果它看起来是一个权限问题,请尝试以下操作:

 sudo setsebool -P httpd_can_sendmail 1 sudo setsebool -P httpd_can_network_connect 1 

启用权限。

最后,我已经设法通过我的Cent OS中的无人用户发送电子邮件。 我不得不从WHM编辑两个设置。

更改设置的path。

WHM – >服务器configuration – >调整设置 – >在邮件标签下

默认情况下以下两个设置是开。 当我closures它时,它允许我发送无人用户的电子邮件。

  1. 限制传出SMTP为root,exim和mailman(FKA SMTP Tweak)

  2. 防止“无人”发送邮件

希望有人能从中受益。 问候!