Session:郵件會話,載入屬性配置。MimeMessage:MIME 郵件對象。MimeBodyPart:郵件部分(文本/圖片/附件)。MimeMultipart:容器,組合多個 BodyPart,指定子類型(mixed/related/alternative)。Transport:發送協議實現。Properties 配置(host、protocol、auth)。Session.getInstance(props) 獲取會話,開啟 debug。session.getTransport() 獲取傳輸對象,connect(user, pwd) 登錄。MimeMessage(見下文四種類型)。transport.sendMessage(msg, recipients) 發送,關閉連接。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);
setSubType("related"):文本與內嵌資源關聯。setSubType("mixed"):獨立部分(附件)混合。MimeUtility.encodeText() 編碼。message.saveChanges() 更新頭部。writeTo(FileOutputStream) 存為 .eml 文件調試。掌握 MimeMultipart 子類型組合,即可構建任意複雜度的郵件。JavaMail 將 MIME 結構映射為直觀對象模型,極大簡化了郵件開發。