簡體   English   中英

不下載附件的特定郵件附件計數 - 使用 Java

[英]Count of particular mail attachment without downloading attachment - using Java

是否可以僅獲取 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();

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

  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;
}

我知道這個解決方案會得到身體部分,但我相信這是唯一准確的方法來查看它是否是附件。

我有一個類似的問題。 接受的答案對我不起作用,因為多部分可能不一定是附件文件。 我通過忽略多部分中的其他可能情況來計算附件的數量。

int count = 0;
Multipart multipart = (Multipart) message.getContent();
for(int i = multipart.getCount() - 1; i >= 0; i--)
{
    BodyPart bodyPart = multipart.getBodyPart(i);
    String bodyPartContentType = bodyPart.getContentType();
    if(isSimpleType(bodyPartContentType)) continue;
    else if(isMultipartType(bodyPartContentType)) continue;
    else if(!isTextPlain(bodyPartContentType)) count++;
}

您可以使用以下方法檢查簡單類型、多部分類型和文本:

private boolean isTextPlain(String contentType)
    {
        return (contentType.contains("TEXT/PLAIN") || (contentType.contains("TEXT/plain")));
    }
    
    
    private boolean isSimpleType(String contentType)
    {
        if(contentType.contains("TEXT/HTML") ||  contentType.contains("text") || 
                contentType.contains("TEXT/html")) return true;
        return false;
    }
    
    
    private boolean isMultipartType(String contentType)
    {
        if(contentType.contains("multipart") || contentType.contains("multipart/mixed")) return true;
        return false;
    }

這對我有用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM