2012-01-07 164 views
1

可能重複:
Swiftmailer 4 does not retrieve bounces as $failedRecipientsSwiftMailer Gmail的SMTP失敗

我使用SwiftMailer使用SMTP通過我的Gmail帳戶發送電子郵件。

我已經完成了一切設置,並且可以毫無問題地發送電子郵件。

documentationsend()應該返回0如果沒有消息發送成功,並填充數組(我把它叫做$failures),與失敗的電子郵件地址。

我看到的問題是,如果我發送電子郵件到一個不存在的地址([email protected]),我從Gmail中回覆:

Mail Delivery Subsystem [email protected] 
9:06 PM (6 minutes ago) 
to me 
Delivery to the following recipient failed permanently: 

    [email protected] 

Technical details of permanent failure: 
DNS Error: Domain name not found 

----- Original message ----- 

然而,swiftmailer仍然返回1(1消息成功發送)並且$failures數組保持空。

由於連接是用SSL加密的,所以我不認爲我可以嗅探並用wireshark查看數據包。

我的預感是GMail的SMTP服務器返回成功,同時它會生成關於失敗的電子郵件並將其發送到發送地址。

這是正確的嗎?如果是這樣,是否有任何方法來捕捉PHP中的失敗?

+0

Swiftmailer只發送電子郵件。錯誤消息稍後提供,Swiftmailer不檢查這些。 – hakre 2012-01-07 12:19:10

+0

只是一個提示:http://www.php.net/manual/en/function.checkdnsrr.php – JuCachalot 2012-01-07 12:26:14

回答

0

Swift只能告訴你SMTP服務器是否接受郵件發送 - 不能檢查郵件發送過程中稍後出現的錯誤。

就你的情況而言,gmail的SMTP守護程序確實接受了該消息,並在嘗試處理它時失敗,這一晚你只能通過這種方式得到通知。

如果您想以編程方式檢查這些,您可以編寫一個IMAP客戶端,該客戶端登錄到您的Gmail帳戶並掃描它以獲取類似的消息。雖然我不確定這是值得付出的努力。

+1

我不認爲:如果一個MX DNS記錄實際上是試圖在發送電子郵件之前該域的存在,您可以檢查這將是困難的。將'Return-Path'設置爲'bounce + uniqueid @ mydomain.com',然後使用cron作業來檢查'bounce @ mydomain.com'並收集這些唯一的id。這裏唯一的問題是,gmail用您的Gmail地址替換任何自定義的「返回路徑」標題,但這不是主要問題:) – F21 2012-01-07 12:39:49