是否可以仅获取 Java 中邮件的附件数量?我尝试使用这个:
DataHandler handler = message.getDataHandler();
AttachedFileName= handler.getName();
这列出了所有邮件收件箱的所有附件,但不列出特定邮件的所有附件。
如果可以的话,这可能吗?
谢谢!
是否可以仅获取 Java 中邮件的附件数量?我尝试使用这个:
DataHandler handler = message.getDataHandler();
AttachedFileName= handler.getName();
这列出了所有邮件收件箱的所有附件,但不列出特定邮件的所有附件。
如果可以的话,这可能吗?
谢谢!
这应该给你附件计数,
Multipart multipart = (Multipart) message.getContent();
int attachmentCount = multipart.getCount();
我没有足够的声誉来评论接受的解决方案:
Multipart multipart = (Multipart) message.getContent();
int attachmentCount = multipart.getCount();
但我不认为它是理想的,原因如下:
许多电子邮件客户端 [例如:Thunderbird] 将所有 HTML 电子邮件作为多部分/替代方式发送。它们包括一个 HTML 部分和一个替代的纯文本部分。从历史上看,这样做是为了让客户选择他们能够展示的最佳选择。
并非作为一部分包含的所有内容都是附件。例如,许多图像不会在电子邮件客户端中显示为附件,因为它们的处置设置为“内联”。
总之,此解决方案可能会将所有 HTML 电子邮件视为具有附件,并将所有带有内联图像的电子邮件视为具有附件。
这是忽略通常不被视为附件的部分的替代方法:
private int getAttachmentCount(Message message) {
int count = 0;
try {
Object object = mMessage.getContent();
if (object instanceof Multipart) {
Multipart parts = (Multipart) object;
for (int i = 0; i < parts.getCount(); ++i) {
MimeBodyPart part = (MimeBodyPart) parts.getBodyPart(i);
if (Part.ATTACHMENT.equalsIgnoreCase(part.getDisposition()))
++count;
}
}
} catch (IOException | MessagingException e) {
e.printStackTrace();
}
return count;
}
我知道这个解决方案会得到身体部分,但我相信这是唯一准确的方法来查看它是否是附件。