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

当请求来自浏览器时,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 上,并且我正在使用 Google 商业电子邮件。

下面是我的代码片段。

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 加载问题。

但我仍然无法使用 nobody 用户发送电子邮件。但我可以使用 root 用户发送电子邮件。

我注意到 WHM 中有一个“阻止‘nobody’发送邮件”的配置。默认情况下,它是开启的,意味着不允许任何人发送电子邮件。所以,如果我关闭它,我应该能够使用 nobody 发送电子邮件。但不确定为什么关闭它后我仍然无法使用 nobody 用户发送电子邮件。

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


感谢您的帮助!

答案1

您是否通过 ssh 以 root 身份运行 php?还是以其他权限高于 Web 服务器的用户身份运行?

如果您知道 Web 服务器以哪个用户身份运行,请尝试以该用户身份运行 php 脚本。您可以使用phpinfo()来找出它以哪个用户身份运行。以该用户身份运行脚本的一种方法如下...首先成为 root 或可以执行 的用户sudo,然后键入以下内容以更改为 Web 服务器用户:

sudo -u www-data bash

显然,www-data如果不同,请用 Web 服务器用户的名称替换;bash如果没有 bash,请用服务器上的有效 shell 替换。一旦您有了 Web 服务器用户的 bash 提示符,请运行id以检查您确实是正确的用户,然后尝试从该用户的命令行运行您的 PHP 脚本。如果它给出相同的错误,那么一定是权限问题。如果它有效,那么至少您排除了它!

如果确实是权限问题,请尝试以下操作:

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

启用权限。

答案2

最后,我终于成功在 Cent OS 上以 nobody 用户身份发送电子邮件。我不得不从 WHM 编辑两个设置。

改变设置的路径。

WHM -> 服务器配置 -> 调整设置 -> 在邮件选项卡下

默认情况下,以下两个设置处于开启状态。当我关闭它们时,它允许我以无人用户身份发送电子邮件。

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

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

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

相关内容