2014-01-31 55 views
5

當我想檢查是誰用JavaMail向我發送特定的電子郵件。消息是否可以有多個發件人?

我可以使用

Message.getFrom() 

它返回一個

Message[] 

在什麼情況下可以復興的消息有它來自多個標識?

關於API這對傳出電子郵件更有意義。

所以我真的能上,即:

Address from = message.getFrom()[0]; 

總是給我回正好1個地址該消息是從發送?

現在我已經實現類似:

Address[] fromAddress = message.getFrom(); 

if (fromAddress == null || fromAddress.length > 1) { 
    // Don't Process the Email and Notify me 
} 
+0

該文檔顯示它可以返回一個*空*數組。 –

+0

如果您想發送消息並且尚未設置,這是有意義的。但是每個傳入的消息應該只有一個來自它的標識。我不明白爲什麼電子郵件/消息應該有多個From字段... – Kuchi

+1

零和一個在實踐中發生。現在不止一個是垃圾郵件的確切標誌(這在以前的千年中有所不同),所以只要確保您的代碼不會在這種情況下崩潰,一切都會好起來的。 – arnt

回答

4

是,似乎Message.getFrom()真的可以返回多個地址。

我查看了Apache Geronimo實現JavaMail API的源代碼,並且如果頭中有多個From:或多個地址,它將返回多個地址。

至於這是否會發生:

正如由Alex K.的回答解釋,該標準允許多個「發件人」地址,如果有一個單一的「發件人」。我不知道是否有人真的用多個「發件人」地址發送郵件,但它符合標準。

這實際上發生在實踐中另一種情況:

一些垃圾郵件發送者顯然與多個From:頭髮送郵件。這不符合標準,但顯然有些郵件服務器仍然接受郵件。這顯然是爲了獲得通過From:地址過濾的郵件過濾器。垃圾郵件發送者包含多個地址,希望如果一個頭腦簡單的過濾器發現一個包含喜歡的「From」地址的消息,它就會讓消息通過。

所以總結:是的,你應該預計Message.getFrom()返回多個地址(或根本沒有)。但是,您可能不需要花費大量精力來處理這種情況。也許你甚至可以將它記錄爲錯誤 - 這取決於你的應用程序。

2

SMTP的MAIL FROM命令只允許1個地址,不過From:頭(IMF格式)不侷限於單一的地址

RFC 5322,3.6.2。發信人字段: 郵件的發件人字段由發件人字段組成,...發件人字段由字段名稱「發件人」和包含一個或多個郵箱規範的以逗號分隔的列表組成。

(這工作,因爲RFC需要一個sender頭是有multible from S)

相關問題