2015-03-02 104 views
1

解析退回的(無法投遞的)電子郵件的最佳方式是什麼?解析退回的電子郵件

當電子郵件反彈回我的服務器時,我想找到爲什麼它彈跳(軟/硬)和無法傳遞的電子郵件地址。然後,我可以在我的數據庫中正確處理它,並/或者標記用戶在下次登錄時更新他們的電子郵件。

我的目標是保護我的域名的郵件聲譽。我只發送交易電子郵件,但過了一段時間,這些收件箱中的一些變得陳舊,郵件反彈回來。我不想每週都將電子郵件發送到反彈的地址。

我找不到任何關於這最近的許多問題,並且什麼都沒有實際的解決方案:

1)How to parse Delivery Status Notifications emails bounced from Mailer Deamons

2)Automatically remove bounced email addresses from database?

我希望有是某種開源庫來幫助解析無法投遞的郵件,但似乎無法找到類似的東西。當然人們長期以來一直在處理這個問題......

我想在我的服務器上處理這個問題,而不是像sendgrid/mandrill/mailgun這樣的服務。

任何人都可以指向正確的方向嗎? (我使用Ubuntu和Postfix)

回答

0

有幾種方法可以做到這一點。

1)GREP

事實證明,後綴保持反彈的信息在它的日誌文件。所有永久錯誤將有5開始使用grep一個DSN狀態,你可以得到與狀態代碼的郵件列表:以上

grep " dsn=5." /var/log/mail.log | grep -o -P " to=<(.+?)>" | sort | uniq -c 

給所有硬反彈。對於軟反彈,請使用" dsn=4."

這個解決方案的好處是它很容易實現。缺點是我們不得不依靠postfix來正確解析郵件,如果您發送到郵件列表而不是單個收件人,它可能不起作用。

2)VERP

可變信封返回路徑(VERP)使用爲每個電子郵件收件人獨特的返回路徑。 (請參閱wikipedia description

請注意,電子郵件的「返回路徑」與「回覆到」不同。 「返回路徑」僅在郵件服務器用於在出現問題時將電子郵件退回到始發服務器。

總之,讓我們說我們是從[email protected]發送電子郵件至[email protected]。如果您以正常的方式發送,您將收到退信消息,並且必須解析消息以確定發送給誰。但是使用verp,您將返回路徑設置爲[email protected]

現在,您可以專門爲退回的電子郵件設置郵箱([email protected])。默認情況下,postfix會忽略電子郵件地址中的「+」之後的任何內容,因此所有退回的郵件都會到達相同的地方。但是現在,原始電子郵件收件人([email protected])包含在返回路徑中,並且可以輕鬆解析出來。

如果您願意,還可以使用虛擬郵箱將郵件直接發送到腳本。在/ etc /後綴/虛擬添加一行

bouncelist: "| php mybounceparser.php" 

這個解決方案肯定是比較複雜的實現,但可能是大的郵件列表的唯一選擇。