没有下载附件的特定邮件附件的计数 - 使用Java

时间:2013-02-04 07:09:38

标签: java

是否有可能只获得Java中邮件的附件数量?我试过用这个:

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

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

如果是这样可以吗?

谢谢!

2 个答案:

答案 0 :(得分:3)

这应该给你附件计数

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

答案 1 :(得分:1)

我没有足够的声誉对已接受的解决方案发表评论:

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

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

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

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

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

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