當請求來自瀏覽器時,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 使用者發送電子郵件。
已編輯:當我檢查 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 -> 伺服器配置 -> 調整設置 -> 在郵件選項卡下
預設情況下,以下兩個設置為開。當我關閉它們時,它允許我以無人使用者發送電子郵件。
- 將傳出 SMTP 限制為 root、exim 和 mailman (FKA SMTP Tweak)
- 防止“無人”發送郵件
希望有人能從中受益。問候!
您是否在 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
啟用權限。