2012-07-27 31 views
1

我使用的是sendmail包和php,當我嘗試在PHP中使用郵件功能時,它返回true,但沒有發送任何內容。PHP不發送出站郵件

PHP配置

; For Unix only. You may supply arguments as well (default: "sendmail -t -i"). 
; http://php.net/sendmail-path 
sendmail_path =/usr/sbin/sendmail -t -i 

php文件

error_reporting(E_ALL|E_STRICT); 
ini_set('display_errors', 1); 
trace(mail('[email protected]','Testing','test.')); 

的郵件日誌通過CLI顯示該

mail() on [/var/www/misc/mail.php:5]: To: [email protected] -- Headers: 

下運行sendmail,因爲這:

echo -e "To: [email protected]\nSubject: Test\nTest\n" | sendmail -bm -t -v 

返回「發件人正常」,「收件人正常」

任何可能導致PHP無法發送電子郵件的任何東西都知道嗎?

回答

6

PHP與郵件傳遞無關。它的工作開始和結束將郵件交給指定的SMTP代理/服務器。如果mail()沒有返回布爾值FALSE,那麼PHP的作業已經成功並且不在圖片中。

檢查您的SMTP服務器的日誌,以查看切換完成後電子郵件會發生什麼。很可能郵件被拒絕/灰名單/垃圾郵件過濾器被遺忘,因爲PHP的mail()確實受到打擊。

考慮切換到SwiftmailerPHPMailer,這兩者都提供遠遠好於PHP()的SMTP交互式診斷。

從命令行手動測試意味着很少:您的shell環境與web服務器環境非常不同,腳本可能在蘋果和橙子中執行。

+0

我會迴應這裏的評論,依賴於郵件()是任何應用程序,你不控制和了解如何配置整個服務器環境真的是一個壞主意。我更喜歡使用像SendGrid,Amazon SES(不適合用於營銷電子郵件)的服務,或者您只需通過API調用發送郵件的類似服務。如果您只是在測試環境中發送低容量電子郵件,那麼許多這些服務都可以使用免費套餐。 – 2012-07-27 16:22:59

+0

結束了去swiftmail,工作的魅力,謝謝 – 2012-07-28 11:12:17

1

這可能會引起誤解。 PHP將返回true,因爲,至於有關,它已完成其部分。但它不能保證SMTP服務器會遵守請求。

當我碰巧遇到過這種情況,原來我的主機實施了一項新的規定,即所有腳本郵件必須在標題中包含一個「發件人」地址,該地址必須是與託管帳戶關聯的有效地址。

值得研究這種可能性。