首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 程式設計入門

JavaMail解析複合郵件:HTML郵件與附件的完整處理方案

     編輯:Java 程式設計入門

複合郵件結構分析

複合郵件包含圖片、HTML正文、純文字替代版等多部分,MIME類型層級結構:

  • multipart/alternative:同一內容不同表現(文字/HTML)
  • multipart/related:HTML內嵌資源(圖片、CSS)
  • 葉子節點:text/plain、text/html、image/*等

郵件結構呈樹狀,需遞迴遍歷才能正確提取內容。

核心處理邏輯

public String getContent(Part part) throws MessagingException, IOException {
    String contentType = part.getContentType();
    if (contentType == null) return "無效部分";
    
    ContentType ct = new ContentType(contentType);
    
    // 文字/HTML直接提取
    if (ct.match("text/plain") || ct.match("text/html")) {
        return "
" + part.getContent() + "
"; } // 附件資訊 StringBuilder result = new StringBuilder(); String fileName = part.getFileName(); if (fileName != null) { result.append("附件: ").append(fileName).append("
"); } String desc = part.getDescription(); if (desc != null) { result.append("說明: ").append(desc).append("
"); } // 遞迴處理multipart if (part.isMimeType("multipart/*")) { Multipart mp = (Multipart) part.getContent(); for (int i = 0; i < mp.getCount(); i++) { result.append(getContent(mp.getBodyPart(i))); } } return result.toString(); }

關鍵技術點

  1. 遞迴遍歷:multipart/alternative與multipart/related嵌套,必須遞迴到葉子節點
  2. 內容類型判斷:使用ContentType.match()而非字串比對,支援參數化MIME類型
  3. 編碼處理:part.getContent()自動處理Base64/Quoted-Printable解碼
  4. 附件下載:非文字部分提供下載連結,傳遞messageId與partIndex定位

優化建議

  • 快取已解析MimeMessage避免重複解析
  • 大附件採用串流式處理避免OOM
  • HTML內容需經過安全過濾(XSS防護)再顯示
  • 內嵌圖片CID映射需建立Content-ID索引

此方案支援主流郵件客戶端生成的複雜MIME結構,是JavaMail處理複合郵件的標準模式。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved