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

JavaMail 郵件構建與發送全攻略:文本、圖片、附件、混合郵件

     編輯:Java 相關知識

1. 郵件標準基礎

  • RFC822:簡單文本郵件(頭部 + 體部)。
  • MIME:多部分郵件,支持附件、圖片、HTML,使用分隔符與 Content-Type 描述結構。

2. JavaMail 核心 API

  • Session:郵件會話,載入屬性配置。
  • MimeMessage:MIME 郵件對象。
  • MimeBodyPart:郵件部分(文本/圖片/附件)。
  • MimeMultipart:容器,組合多個 BodyPart,指定子類型(mixed/related/alternative)。
  • Transport:發送協議實現。

3. 五步發送流程

  1. 創建 Properties 配置(host、protocol、auth)。
  2. Session.getInstance(props) 獲取會話,開啟 debug。
  3. session.getTransport() 獲取傳輸對象,connect(user, pwd) 登錄。
  4. 構建 MimeMessage(見下文四種類型)。
  5. transport.sendMessage(msg, recipients) 發送,關閉連接。

4. 四種郵件構建代碼

純文本郵件

MimeMessage msg = new MimeMessage(session);
msg.setFrom(new InternetAddress("from@sohu.com"));
msg.setRecipient(RecipientType.TO, new InternetAddress("to@sina.com"));
msg.setSubject("純文本郵件");
msg.setContent("你好!", "text/html;charset=UTF-8");

內嵌圖片郵件

MimeBodyPart text = new MimeBodyPart();
text.setContent("帶圖片<img src='cid:xxx.jpg'>", "text/html;charset=UTF-8");

MimeBodyPart image = new MimeBodyPart();
image.setDataHandler(new DataHandler(new FileDataSource("src/1.jpg")));
image.setContentID("xxx.jpg");

MimeMultipart mp = new MimeMultipart();
mp.addBodyPart(text);
mp.addBodyPart(image);
mp.setSubType("related"); // 關鍵:關聯關係
msg.setContent(mp);

帶附件郵件

MimeBodyPart text = new MimeBodyPart();
text.setContent("帶附件", "text/html;charset=UTF-8");

MimeBodyPart attach = new MimeBodyPart();
attach.setDataHandler(new DataHandler(new FileDataSource("src/2.jpg")));
attach.setFileName(attach.getDataHandler().getName());

MimeMultipart mp = new MimeMultipart();
mp.addBodyPart(text);
mp.addBodyPart(attach);
mp.setSubType("mixed"); // 關鍵:混合關係
msg.setContent(mp);

圖片+附件混合郵件

// 文本+圖片 -> related
MimeMultipart mp1 = new MimeMultipart();
mp1.addBodyPart(textPart);
mp1.addBodyPart(imagePart);
mp1.setSubType("related");

// 附件們 -> mixed
MimeMultipart mp2 = new MimeMultipart();
mp2.addBodyPart(attach1);
mp2.addBodyPart(attach2);

// 整體:將 related 部分作為一個 BodyPart 加入 mixed
MimeBodyPart content = new MimeBodyPart();
content.setContent(mp1);
mp2.addBodyPart(content);
mp2.setSubType("mixed");
msg.setContent(mp2);

5. 關鍵點總結

  • setSubType("related"):文本與內嵌資源關聯。
  • setSubType("mixed"):獨立部分(附件)混合。
  • 中文附件名需 MimeUtility.encodeText() 編碼。
  • message.saveChanges() 更新頭部。
  • 可 writeTo(FileOutputStream) 存為 .eml 文件調試。

總結

掌握 MimeMultipart 子類型組合,即可構建任意複雜度的郵件。JavaMail 將 MIME 結構映射為直觀對象模型,極大簡化了郵件開發。

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