[英]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();
但我不認為它是理想的,原因如下:
許多電子郵件客戶端 [例如:Thunderbird] 將所有 HTML 電子郵件作為多部分/替代方式發送。 它們包括一個 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;
}
我知道這個解決方案會得到身體部分,但我相信這是唯一准確的方法來查看它是否是附件。
我有一個類似的問題。 接受的答案對我不起作用,因為多部分可能不一定是附件文件。 我通過忽略多部分中的其他可能情況來計算附件的數量。
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.