Hotmail 實作郵件傳送狀態通知(multipart/report),常見郵件客戶端僅支援 multipart/mixed、alternative、related,忽略報告類型導致無法正確處理退信。
標準定義 multipart/report MIME 類型回報傳送錯誤,但廣泛實作度低。最終伺服器檢測錯誤後回報寄件者,中繼伺服器不檢測。關聯原始郵件與退信困難,業界常用 VERP(Variable Envelope Return Paths)等技巧輔助。
private void parseMultipart(Multipart multipart) throws Exception {
for (int i = 0, n = multipart.getCount(); i < n; i++) {
BodyPart part = multipart.getBodyPart(i);
String disposition = part.getDisposition();
if (part.isMimeType("multipart/*")) {
parseMultipart((Multipart) part.getContent()); // 遞迴解析
} else if (part.isMimeType("text/html")) {
// 處理 HTML 內容
}
// 處理附件、圖片等...
else if (part.isMimeType("message/delivery-status")) {
part.setFileName("details.txt"); // 模仿 Outlook 命名
saveAttachedFile(part); // 儲存傳送狀態通知頭部資訊
} else if (part.isMimeType("message/rfc822")) {
// 處理封裝的原始郵件
}
}
}
關鍵點:遞迴處理巢狀 multipart,識別 message/delivery-status 並儲存為 details.txt,message/rfc822 為原始郵件內容,可進一步解析關聯。