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

JavaMail 郵件接收完整解析:MimeMessage 遞迴解析、附件下載、編碼處理

     編輯:Java 相關知識

JavaMail 處理郵件接收最棘手在於 MIME 結構複雜:多層 multipart/*、巢狀 message/rfc822、編碼參雜。本文提供生產級 PraseMimeMessage 工具類,完整實現發件人/收件人/主題/日期/正文/附件/已讀狀態/回執/Message-ID 解析與附件存檔。

核心架構

  • 輸入:javax.mail.internet.MimeMessage
  • 遞迴解析 Part 介面(MimeMessage、BodyPart 皆實作)
  • 依 Content-Type 分派處理邏輯

關鍵解析邏輯:getMailContent(Part)

public void getMailContent(Part part) throws Exception {
    String ct = part.getContentType();
    boolean hasName = ct.indexOf("name") != -1;
    
    if (part.isMimeType("text/plain") && !hasName) {
        bodytext.append((String) part.getContent());
    } else if (part.isMimeType("text/html") && !hasName) {
        bodytext.append((String) part.getContent());
    } else if (part.isMimeType("multipart/*")) {
        Multipart mp = (Multipart) part.getContent();
        for (int i=0; i

附件偵測與儲存

public boolean isContainAttach(Part part) { ... }  // 遞迴檢查 disposition 或 application/name

public void saveAttachMent(Part part) { ... }  // 遞迴處理 multipart、message/rfc822
// 關鍵:decodeText() 處理 GB2312 等編碼檔名
// 儲存:BufferedInputStream → BufferedOutputStream 逐位元組寫入

其他實用功能

方法功能
getFrom()發件人「姓名 <email>」格式,含 MimeUtility.decodeText
getMailAddress("to"/"cc"/"bcc")收件/抄送/密送清單
getSubject()主題解碼
getSentDate()日期格式化 (可自訂 pattern)
getReplySign()檢查 Disposition-Notification-To 標頭
getMessageId()Message-ID
isNew()Flags.Flag.SEEN 判斷已讀/未讀

測試主程式:POP3 連線收信

Properties props = new Properties();
Session session = Session.getDefaultInstance(props, null);
Store store = session.getStore("pop3");
store.connect("pop.mail.yahoo.com.cn", "username", "password");
Folder folder = store.getFolder("INBOX");
folder.open(Folder.READ_ONLY);
Message[] msgs = folder.getMessages();

PraseMimeMessage pmm = null;
for (int i=0; i

編碼處理重點

  • MimeUtility.decodeText() 處理主題、發件人、附件檔名編碼
  • 偵測檔名含 gb2312 關鍵字判斷是否解碼
  • 跨平台路徑分隔符:Windows \\、Linux/Unix /

擴充建議

  • 加入 HTML 正文安全過濾 (XSS 防護)
  • 支援 IMAP 協定(session.getStore("imap"))
  • 整合資料庫持久化郵件索引
  • 非同步批次處理大量郵件
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved