Email

當請求來自瀏覽器時,SMTP connect() 失敗

  • December 20, 2016

我有一個使用 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 使用者發送電子郵件。

已編輯:當我檢查 apache 伺服器日誌時,我發現來自瀏覽器的每個請求都會生成以下錯誤。不確定這個錯誤是什麼。我正在做這方面的研究。如果有人知道這個問題,我將不勝感激。謝謝你!錯誤日誌************ *

$$ Tue Dec 20 12:38:45.875892 2016 $$ $$ ssl:error $$ $$ pid 913 $$(101)網路不可達:$$ client 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:響應者錯誤 $$ Tue Dec 20 12:38:46.181171 2016 $$ $$ ssl:error $$ $$ pid 919 $$(101)網路不可達:$$ 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:響應者錯誤


感謝您的幫助!

最後,我成功地在我的 Cent 作業系統中由無人使用者發送電子郵件。我不得不從 WHM 編輯兩個設置。

更改設置的路徑。

WHM -> 伺服器配置 -> 調整設置 -> 在郵件選項卡下

預設情況下,以下兩個設置為開。當我關閉它們時,它允許我以無人使用者發送電子郵件。

  1. 將傳出 SMTP 限制為 root、exim 和 mailman (FKA SMTP Tweak)
  2. 防止“無人”發送郵件

希望有人能從中受益。問候!

您是否在 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

啟用權限。

引用自:https://serverfault.com/questions/821346