2013-02-04 47 views
1

是否有可能只獲得Java中郵件附件的計數?我試着用這個:沒有下載附件的特定郵件附件的計數 - 使用Java

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

這列出了所有郵件收件箱的所有附件,但不是特定的郵件。

這是可能的,如果是這樣怎麼樣?

謝謝!

+0

退房這個帖子:http://stackoverflow.com/questions/1748183/download-attachments-using-java-mail – Melanie

回答

2

這應該給你的附件數量,

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

由於它的工作。 – TheDevMan

1

我沒有足夠的聲譽上接受的解決方案發表評論:

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

但我不認爲它是理想的原因如下:

  1. 許多電子郵件客戶端[例如:雷鳥]發送所有的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; 
} 

我知道,這個解決方案得到了身體的一部分,但我相信這是唯一正確的方法,如果它是一個附件。

問候, 格倫