仅获取电子邮件中的附件

Get Only the Attachments from an E-mail

我有一个检查电子邮件附件的代码:

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

但是,numAttachments return 附件数量 + 1。当我遍历 mp.getBodyPart(index) 时,我发现我遍历了附件和电子邮件。我只想获取附件,而不是电子邮件。

我知道that:

Attachments will usually, but not always, have a Content-Disposition of attachment. Attachments will usually, but not always, have a file name.

当我对其进行测试时,我发现电子邮件始终位于第 0 个索引处,附件位于其后。因此,跳过第 0 个索引可能是一个解决方案,但我不知道这是否对所有电子邮件服务器都有效。

如何只获取电子邮件中的附件?

在简单的情况下,multipart/mixed 类型的消息将第一个 body 部分作为消息的主要内容,其他 body 部分作为附件。第一个 body 部分可能是一个简单的 text/plain 部分,也可能是 multipart/alternative 或 multipart/related 部分。但是跳过第一个 body 部分通常会达到你想要的效果。

MIME 允许更多复杂的情况。您必须决定是否以及如何处理这些情况。最复杂的情​​况是签名和加密的消息,但它们相对较少。