ReciveMail 是一個功能完整的 JavaMail 郵件接收解析工具類,封裝了從 POP3 服務器獲取郵件、解析發件人/收件人/主題/日期/正文/附件、已讀狀態、回執標誌等核心功能,適合集成到郵件客戶端或自動化處理系統中。
| 方法 | 功能 |
|---|---|
getFrom() | 獲取發件人地址與別名 |
getMailAddress(type) | 獲取收件人/抄送/密送地址 |
getSubject() | 解碼並獲取郵件主題 |
getSendDate() | 獲取格式化發送日期 |
getBodyText() | 獲取解析後的純文本/HTML 正文 |
getReplySign() | 判斷是否需要回執 |
isNew() | 判斷是否為未讀郵件 |
isContainAttch(part) | 遞歸檢測是否包含附件 |
saveAttchMent(part) | 遞歸保存所有附件到本地 |
getMailContent(part) | 核心遞歸解析 MimeMessage/Multipart 結構 |
郵件可能是簡單的 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());
}
Part.ATTACHMENT 或 Part.INLINE disposition,或 Content-Type 包含 application/name。gb2312 編碼文件名,使用 MimeUtility.decodeText。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();
MimeUtility.decodeText 解碼,防止中文亂碼。Folder、Store、輸入流,避免連接泄漏。ReciveMail 類將 JavaMail 底層 API 封裝為高層業務接口,代碼雖長但邏輯清晰,是學習郵件解析、構建郵件系統的優秀參考。