2017-04-14 38 views
0

我有檢查的電子郵件附件代碼:只得到附件

final Multipart mp = (Multipart) msg.getContent(); 
final int numAttachments = mp.getCount(); 
... 
final Part part = mp.getBodyPart(attachmentNumber); 

然而,附件的numAttachments回數+ 1。當我遍歷mp.getBodyPart(index)我看到了我迭代附件和電子郵件。我只想獲得附件,而不是電子郵件。

我知道that

附件通常,但並非總是如此,有附件的內容處置。附件通常但不總是具有文件名。

當我測試它時,我看到電子郵件總是在第0個索引處,並且附件在此之後。所以,跳過第0個索引可能是一個解決方案,但我不知道這是否適用於所有電子郵件服務器。

如何從電子郵件中獲取附件?

+0

「附件」的概念沒有真正定義。然而,多部分的子類型是被定義的,並且會幫助你弄清楚如何處理這些部分。例如,multipart/related和multipart/alternative是非常不同的。 – erickson

+0

我用Exchange測試時,第一個索引始終是電子郵件,但我想確定它。有一個解釋:「所以,一個好的方法首先是隻考慮具有頂級多部分/混合內容的消息,然後考慮第一部分之後的部分是附件,無論他們是否說或不。」這裏:http: //www.oracle.com/technetwork/java/faq-135477.html#attachments它是否驗證我的建議? – kamaci

回答

0

在簡單情況下,multipart/mixed類型的消息將第一個正文部分作爲消息的主要內容,其他正文部分作爲附件。第一個正文部分可以是簡單的文本/平面部分,也可以是多部分/備選或多部分/相關部分。但是跳過第一個身體部位通常會做你想要的。

還有很多MIME允許的複雜情況。您必須決定是否以及如何處理這些情況。最複雜的情​​況是簽名和加密的消息,但它們相對較少。