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

JavaMail 郵件接收解析工具類 ReciveMail 詳解

     編輯:Java 相關知識

概述

ReciveMail 是一個功能完整的 JavaMail 郵件接收解析工具類,封裝了從 POP3 服務器獲取郵件、解析發件人/收件人/主題/日期/正文/附件、已讀狀態、回執標誌等核心功能,適合集成到郵件客戶端或自動化處理系統中。

核心功能方法表

方法功能
getFrom()獲取發件人地址與別名
getMailAddress(type)獲取收件人/抄送/密送地址
getSubject()解碼並獲取郵件主題
getSendDate()獲取格式化發送日期
getBodyText()獲取解析後的純文本/HTML 正文
getReplySign()判斷是否需要回執
isNew()判斷是否為未讀郵件
isContainAttch(part)遞歸檢測是否包含附件
saveAttchMent(part)遞歸保存所有附件到本地
getMailContent(part)核心遞歸解析 MimeMessage/Multipart 結構

關鍵實現細節

1. MIME 結構遞歸解析

郵件可能是簡單的 text/plain、text/html,也可能是嵌套的 multipart/* 或 message/rfc822。getMailContent 通過 Part.isMimeType() 判斷類型並遞歸處理:

if (part.isMimeType("text/plain") || part.isMimeType("text/html")) {
    bodytext.append((String) part.getContent());
} else if (part.isMimeType("multipart/*")) {
    Multipart mp = (Multipart) part.getContent();
    for (int i = 0; i < mp.getCount(); i++) {
        getMailContent(mp.getBodyPart(i));
    }
} else if (part.isMimeType("message/rfc822")) {
    getMailContent((Part) part.getContent());
}

2. 附件檢測與保存

  • 判斷依據:Part.ATTACHMENT 或 Part.INLINE disposition,或 Content-Type 包含 application/name。
  • 文件名解碼:處理 gb2312 編碼文件名,使用 MimeUtility.decodeText。
  • 跨平台路徑:根據 OS 自動選擇分隔符與默認目錄。

3. POP3 客戶端完整示例

Properties props = new Properties();
props.setProperty("mail.store.protocol", "pop3");
props.setProperty("mail.pop3.host", "pop.163.com");
Session session = Session.getInstance(props);
session.setDebug(true);

Store store = session.getStore();
store.connect("pop.163.com", "username", "password");

Folder folder = store.getFolder("inbox");
folder.open(Folder.READ_ONLY);

Message[] messages = folder.getMessages();
for (int i = 0; i < messages.length; i++) {
    ReciveMail rm = new ReciveMail((MimeMessage) messages[i]);
    rm.recive(messages[i], i); // 打印郵件詳情並保存附件
}

folder.close(false);
store.close();

實戰注意事項

  • 163/126 郵箱:需在網頁端開啟 POP3/SMTP/IMAP 服務,並使用授權碼而非登錄密碼。
  • 編碼處理:主題、發件人、附件名均需 MimeUtility.decodeText 解碼,防止中文亂碼。
  • 大郵件/附件:遞歸解析大郵件可能導致棧溢出或 OOM,生產環境建議流式處理或限制大小。
  • 資源釋放:及時關閉 Folder、Store、輸入流,避免連接泄漏。

總結

ReciveMail 類將 JavaMail 底層 API 封裝為高層業務接口,代碼雖長但邏輯清晰,是學習郵件解析、構建郵件系統的優秀參考。

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