2010-04-20 118 views
5

我用一個小的Java SMTP庫(http://code.google.com/p/subethasmtp/),解析這個我需要解析單獨的部件收到的郵件即正文,附件等電子郵件附件通過mime4j

我想使用mime4j,但該文檔建議mime4j只能提供事件通知或令牌通知,而不是別的。對於剝離身體和附件等,我不得不在事件處理程序中使用自己的自定義邏輯。我的觀察是否正確?

如果是的話,我該如何使用mime4j來滿足我的要求。請建議。

我非常需要一種方法,它接受smtp數據流,並以java中完全解析出的形式返回附件引用或流的數組。請幫忙。

在此先感謝

阿希什·夏爾馬

+0

同時,在自我調查中,我發現在amavisd-new中使用了perl庫MIME :: PARSER。來自amavisd-new的郵件列表人員告訴我,像我需要的解碼郵件對象可以從amavisd-new perl腳本引用,但是有可能我可以使用它從perl到java? – 2010-04-27 19:00:42

+1

我遇到了同樣的問題,同時谷歌在這個地方發現了你的名字(郵件列表,論壇)。謝謝你節省我的時間! – 2011-06-06 20:24:24

回答

9

Mime4j絕對可以做你的需要。創建org.apache.james.mime4j.message.SimpleContentHandler的子類,並實現bodyDecoded方法。然後將此子類傳遞給MimeStreamParser實例。您會看到bodyDecoded每個主體或附件調用一次,並且它提供給您的流包含已執行Base64或Quoted-Printable解碼的數據。

如果您一般不喜歡基於事件的API,則可以嘗試通過org.apache.james.mime4j.message.Message類公開的更多類似DOM的功能。您可以調用Message.getBody(),然後查看它返回的是Multipart,TextBody,BinaryBody等的實例。如果Multipart,則可以調用Multipart.getBodyParts來遞歸到子部分。

+0

感謝您的建議,現在我面臨的問題是重新創建從iPhone發送的郵件,郵件標題有「X-Mailer:iPhone Mail(7D11)」,任何人都可以告訴我什麼自定義邏輯我需要考慮發送的郵件通過iphones。 – 2010-05-02 18:06:53

+0

解決了所有問題mime4j比java mail api的工作好得多。 – 2012-02-06 09:47:53

2

@Ashish其他的選擇,因爲你正在使用SubEthaSmtp是做什麼SubEtha郵件列表管理者做:http://code.google.com/p/subetha/source/browse/trunk/src/org/subethamail/common/SubEthaMessage.java

鏈接的類擴展SMTPMessage並有一堆getPart()方法。 javax.mail.Part具有將附件轉換爲文件所需的大部分內容。

+0

Adam,目前我正在使用Java郵件API來解析電子郵件,以將郵件正文和附件分離爲單獨的文件。我正在尋找mime4j的原因是,java郵件API有時會失敗,並且對於嚴重格式化的MIME消息(我的經驗)並不容錯,而mime4j承諾這麼做。所以作爲替代方案,我正在研究mime4j。我會很快發佈我的詳細結果。 – 2011-06-08 06:49:25

+0

Adam,mime4j絕對是java郵件API的一個更好的選擇,它爲實現提供了乾淨的接口。我用mime4j(0.7)的測試結果非常好。 – 2011-10-10 15:52:24