JavaMail 實戰:基於 JavaMail + JAF 發送文本/HTML 郵件完整教程
環境準備
- JDK:Java SE 需額外下載 JavaMail 1.4.5 及 JAF 1.1.1;Java EE JDK 已內置。
- 所需 JAR:
mail.jar、dsn.jar、imap.jar、mailapi.jar、pop3.jar、smtp.jar、activation.jar 全部加入項目。
四大核心類架構
- MailSenderInfo — 郵件元數據封裝(服務器、端口、賬號、密碼、發/收件人、主題、內容、附件、是否驗證)。
- MyAuthenticator — 繼承
javax.mail.Authenticator,提供用戶名/密碼認證。
- SimpleMailSender — 核心發送邏輯,提供兩種靜態方法:
sendTextMail():純文本郵件;
sendHtmlMail():HTML 富文本郵件(MimeMultipart + text/html; charset=utf-8)。
- SendMailDemo — 測試類,配置 163 SMTP 示例(需開啟 POP3/SMTP/IMAP 服務並生成授權碼)。
關鍵代碼片段
Session 創建與發送流程
Properties pro = mailInfo.getProperties();
MyAuthenticator auth = mailInfo.isValidate()
? new MyAuthenticator(mailInfo.getUserName(), mailInfo.getPassword())
: null;
Session session = Session.getDefaultInstance(pro, auth);
MimeMessage msg = new MimeMessage(session);
msg.setFrom(new InternetAddress(mailInfo.getFromAddress()));
msg.setRecipient(Message.RecipientType.TO, new InternetAddress(mailInfo.getToAddress()));
msg.setSubject(mailInfo.getSubject());
msg.setSentDate(new Date());
// 文本郵件
msg.setText(mailInfo.getContent());
Transport.send(msg);
// HTML 郵件
MimeMultipart mp = new MimeMultipart();
MimeBodyPart html = new MimeBodyPart();
html.setContent(mailInfo.getContent(), "text/html; charset=utf-8");
mp.addBodyPart(html);
msg.setContent(mp);
Transport.send(msg);
效果對比
- 文本模式:內容原樣顯示,標籤不渲染;
- HTML 模式:支持排版、圖片、鏈接等富文本效果。
常見坑點提示
- 163/qq 等郵箱需在網頁端開啟「SMTP 服務」並使用「授權碼」而非登錄密碼;
- 端口通常 25/465/587,視服務商而定;
- 附件發送需在
MimeMultipart 再添加 MimeBodyPart 並 attachFile()。