2011-01-19 66 views
13

有什麼方法可以檢測(使用RFC 2822標頭)電子郵件是轉發電子郵件嗎?轉發電子郵件檢測

+0

您的意思是「轉發」,如設置轉發地址,以便所有郵件自動重定向至不同的郵箱,或者在點擊郵件中的「轉發」按鈕時「轉發」,並輸入收件人電子郵件地址一些描述性文字? – dkarp 2011-01-20 03:43:34

+0

如果前者,另請參閱http://stackoverflow.com/questions/4742533/is-the-delivered-to-header-the-right-place-to-find-the-address-of-the-recipient-f和http://stackoverflow.com/questions/4739354/email-server-design-avoiding-loops – dkarp 2011-01-20 03:45:40

回答

18

有兩件事情,通常被稱爲「轉發」。

當你設置自動帳戶級別轉發到另一電子郵件地址,您的郵件系統通常會引入一個額外的頭,使其能夠檢測並打破郵件循環。不幸的是,這個標題的名稱從未標準化。 Some use Delivered-To, some use X-Loop,有些使用X-Original-To,有些使用專有的郵件軟件的X-header。但是沒有單一的標題字段存在所有情況。

當您通過單擊郵件程序中的「轉發」按鈕手動轉發郵件並輸入收件人電子郵件地址和一些描述性文本時,會生成一個帶有新標頭Message-ID的新郵件。此消息上的標題集將與普通回覆無法區分 - In-Reply-ToReferences的設置方式完全相同。唯一的區別是,Subject頭部將通常開始用「Fwd:」或用「(fwd)」結尾。 (「通常」,因爲有些客戶將其格式化爲「[Fwd: <original subject>]」用方括號的新的課題,一些客戶本地化前綴Fwd:變成自己的語言,而有些用戶在點擊「發送」之前手動編輯Subject。)

所以有好的提示表示一條消息被轉發,但沒有硬性規則和快速規則。

3

spec,CTRL + F爲「前進」給出了以下頭字段:

resent-date  =  "Resent-Date:" date-time CRLF 
resent-from  =  "Resent-From:" mailbox-list CRLF 
resent-sender =  "Resent-Sender:" mailbox CRLF 
resent-to  =  "Resent-To:" address-list CRLF 
resent-cc  =  "Resent-Cc:" address-list CRLF 
resent-bcc  =  "Resent-Bcc:" (address-list/[CFWS]) CRLF 
resent-msg-id =  "Resent-Message-ID:" msg-id CRLF 

我不知道各大郵件軟件是否使用這些雖然。

編輯

閱讀規格有點太快了,也有這樣一個字條:

注:重新引入的消息到運輸系統和使用 重發領域,是從不同的操作「轉發」。 「轉發」具有兩層含義:一種轉發意味着用戶可以告知郵件讀取程序將消息 的副本轉發給其他人,使轉發的消息成爲新消息的主體。在這種意義上轉發的消息似乎沒有 來自原始發件人,但是是來自 消息轉發器的全新消息。另一方面,轉發也是 用於表示郵件傳輸程序何時收到消息,並且 將其轉發到不同的目標以進行最終傳遞。 Resent 標題字段不適用於任何類型的 轉發。

沒有其他的「forwarding」通知,所以除了subject = "Fwd: <msg>"約定外,沒有可用於檢測轉發的頭字段。