5

是否可以仅获取 Java 中邮件的附件数量?我尝试使用这个:

DataHandler handler = message.getDataHandler();
AttachedFileName= handler.getName();

这列出了所有邮件收件箱的所有附件,但不列出特定邮件的所有附件。

如果可以的话,这可能吗?

谢谢!

4

2 回答 2

4

这应该给你附件计数,

Multipart multipart = (Multipart) message.getContent();
int attachmentCount = multipart.getCount();
于 2013-02-04T07:24:36.957 回答
3

我没有足够的声誉来评论接受的解决方案:

  Multipart multipart = (Multipart) message.getContent();
  int attachmentCount = multipart.getCount();

但我不认为它是理想的,原因如下:

  1. 许多电子邮件客户端 [例如:Thunderbird] 将所有 HTML 电子邮件作为多部分/替代方式发送。它们包括一个 HTML 部分和一个替代的纯文本部分。从历史上看,这样做是为了让客户选择他们能够展示的最佳选择。

  2. 并非作为一部分包含的所有内容都是附件。例如,许多图像不会在电子邮件客户端中显示为附件,因为它们的处置设置为“内联”。

总之,此解决方案可能会将所有 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;
}

我知道这个解决方案会得到身体部分,但我相信这是唯一准确的方法来查看它是否是附件。

于 2016-12-14T18:51:42.673 回答