是否有可能只获得Java中邮件的附件数量?我试过用这个:
DataHandler handler = message.getDataHandler();
AttachedFileName= handler.getName();
这列出了所有邮件收件箱的所有附件,但没有列出特定邮件的附件。
如果是这样可以吗?
谢谢!
答案 0 :(得分:3)
这应该给你附件计数
Multipart multipart = (Multipart) message.getContent();
int attachmentCount = multipart.getCount();
答案 1 :(得分:1)
我没有足够的声誉对已接受的解决方案发表评论:
Multipart multipart = (Multipart) message.getContent();
int attachmentCount = multipart.getCount();
但我不认为这是理想的,原因如下:
许多电子邮件客户端[例如:Thunderbird]将所有HTML电子邮件作为multipart / alternative发送。它们包括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;
}
我知道这个解决方案可以获得身体部分,但我相信这是查看它是否是附件的唯一准确方法。