通過 PHP mail() 發送郵件時出錯
我們使用 postfix 和 sendmail 介面,並嘗試使用 php mail() 函式發送郵件,並收到以下錯誤:
無法在第 9 行的 /var/www/html/xyz/temp.php 中執行郵件傳遞程序“/usr/sbin/sendmail -t -i”
/usr/sbin/sendmail 存在並具有執行權限
伺服器是虛擬專用伺服器:Linux 版本 2.6.9-023stab051.2-smp (root@rhel4-64) (gcc 版本 3.4.5 20051201 (Red Hat 3.4.5-2)) #1 SMP Thu Sep 24 22: 32:27 默沙東 2009
postfix 正在執行,我們可以通過 telnet localhost smtp 發送郵件
過去兩年執行良好,現在突然發生此錯誤。
有一個類似的執行緒,但沒有回答: 錯誤:無法執行郵件傳遞程序’/usr/sbin/sendmail’
哦,從 PHP 中執行外部程序的能力突然改變了?聽起來有人在共享主機上執行,他們的託管服務提供商突然決定提高他們伺服器上的安全性(可能是因為他們被大量 pwned)並且懶得告訴任何人(因為“它會破壞什麼?”)。在這種情況下,您會舉手並轉移到共享託管服務提供商那裡,該提供商提供專業服務並且不會為了它而改變事情。
但是,在您的情況下,這可能不太可能,因為您聲明您在“虛擬專用伺服器”上(儘管受折磨的術語暗示市場機器人干擾,這絕不是一個好兆頭)。然而,這“突然停止工作”的事實無情地讓我們得出同樣的結論:有些東西已經改變了,而改變它的人並沒有先正確地測試。
因此,您要做的是查看機器的變更管理歷史記錄,並確定在問題發生時發生了什麼變化。或者,由於您沒有變更管理歷史(假設,但我願意投入資金),您與所有在盒子上紮根的人交談並詢問他們做了什麼(如果很多人擁有root權限,然後放棄並建立一個具有良好安全和管理策略的新盒子)。
您還可以嘗試通過查看包管理日誌來縮小更改的範圍(我認為RHEL4 記錄了所有包安裝/升級,但我上次接觸 RHEL4 是在兩年前,我有點模糊),命令 shell歷史記錄、sudo 日誌(如果你真的很幸運的話),並進行戰略性
find -mtime -N
執行以查看哪些文件比你為服務失敗確定的任何時間範圍更新。備份(假設您保留存檔備份,您當然應該進行配置)有助於準確辨識更改的內容。一旦您知道發生了什麼變化,您就可以檢查這些變化並嘗試縮小問題的範圍。與 PHP、您的 MTA 或您的網路伺服器有關的任何事情都是顯而易見的直接候選者,但不要這麼快就忽略看似無害的更改——如果您不確定,請將其保留在“可能”列表中。然後你就有了一項有趣的工作,那就是嘗試扭轉變化,直到你發現問題。這是一項艱苦而費力的工作,充滿危險,如果有多種變化會影響問題,你可能會在那裡待很長時間。
聽起來很難?當然是。這就是為什麼您從(計劃、測試、文件)開始正確地完成工作並且不要吝嗇細節。