Hotmail 實現了郵件傳送狀態通知 (multipart/report),標準郵件客戶端常忽略此類型,導致退信無法正確識別。RFC 1892 定義了 DSN (Delivery Status Notifications) 格式,但普及率低,眾多服務器採用私有格式,增加解析難度。
在現有 parseMultipart 遞歸解析中,針對兩種特殊 MIME 類型添加處理:
private void parseMultipart(Multipart multipart) throws Exception {
for (int i = 0, n = multipart.getCount(); i < n; i++) {
BodyPart part = multipart.getBodyPart(i);
if (part.isMimeType("multipart/*")) {
parseMultipart((Multipart) part.getContent());
} else if (part.isMimeType("text/html")) {
// 處理文本內容
}
// 處理附件、圖片等...
// 【關鍵擴展】退信狀態通知
else if (part.isMimeType("message/delivery-status")) {
part.setFileName("details.txt"); // 模仿 Outlook 命名
saveAttachedFile(part); // 內含退信原因、狀態碼、原郵件頭等
}
// 【關鍵擴展】原郵件內容 (RFC822 格式)
else if (part.isMimeType("message/rfc822")) {
MimeBodyPart mbp = new MimeBodyPart(part.getInputStream());
part.setFileName(mbp.getHeader("Subject", null) + ".eml"); // 以原主題命名
saveAttachedFile(part);
}
}
}
Hotmail 非 POP3,而是基於 WebDAV 協議。JavaMail 訪問 Hotmail 需使用專用 Provider(如 com.sun.mail.webdav),詳見《通過 JavaMail 訪問 Hotmail 郵箱》。