一 . 電子郵件傳輸的全過程:html
二 . JavaMail 的體系結構與API分類java
JavaMail API按其功能劃分一般可分爲以下三大類:服務器
建立和解析郵件內容的API :Message類是建立和解析郵件的核心API,它的實例對象表明一封電子郵件。
發送郵件的API:Transport類是發送郵件的核心API類,它的實例對象表明實現了某個郵件發送協議的郵件發送對象,例如SMTP協議。
接收郵件的API:Store類是接收郵件的核心API類,它的實例對象表明實現了某個郵件接收協議的郵件接收對象,例如POP3協議。
Session類
Session類用於定義整個應用程序所需的環境信息,以及收集客戶端與郵件服務器創建網絡鏈接的會話信息,如郵件服務器的主機名、端口號、採用的郵件發送和接收協議等。Session對象根據這些信息構建用於郵件收發的Transport和Store對象,以及爲客戶端建立Message對象時提供信息支持。
網絡
三. 郵件發送的過程:session
四.使用JavaMail發送一封帶圖片和附件的複雜郵件:ide
郵件組織結構相關的API:spa
MimeMessage類表示整封郵件。
MimeBodyPart類表示郵件的一個MIME消息。
MimeMultipart類表示一個由多個MIME消息組合成的組合MIME消息。調試
複雜郵件的結構圖:code
發送郵件步驟;orm
1. 搭建開發環境:準備發送郵件相關jar包:
mail.jar
activation.jar(JAF):(可選的,若是JDK6.0+,則不須要此包)
2. 編寫代碼實現,以下:
package com.itheima; import java.io.FileOutputStream; import java.util.Properties; import javax.activation.DataHandler; import javax.activation.FileDataSource; import javax.mail.Authenticator; import javax.mail.Message; import javax.mail.PasswordAuthentication; import javax.mail.Session; import javax.mail.Transport; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeBodyPart; import javax.mail.internet.MimeMessage; import javax.mail.internet.MimeMultipart; //實現本身向本身發送一封複雜郵件 public class SendMessage { public static void main(String[] args) throws Exception{ Properties props = new Properties();//環境變量 props.setProperty("mail.host", "smtp.163.com"); props.setProperty("mail.transport.protocol", "smtp"); props.setProperty("mail.smtp.auth", "true"); Session session = Session.getInstance(props,new Authenticator() { @Override public PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication("laotian", "123"); } }); session.setDebug(true);//開始調試:監控smtp協議 Transport ts = session.getTransport(); ts.connect("smtp.163.com", "laotian", "123");//鏈接郵件發送服務器 //建立表明郵件的對象MimeMessage MimeMessage message = new MimeMessage(session); message.setSubject("tttttttt"); message.setFrom(new InternetAddress("laotian@163.com")); message.setRecipient(Message.RecipientType.TO, new InternetAddress("laotian@163.com")); //分別建立郵件的每部份內容,設置類型,有id的設置id。MimeBodyPart MimeBodyPart part1 = new MimeBodyPart(); part1.setContent("aaa<img src='cid:mm'/>aaa", "text/html"); MimeBodyPart part2 = new MimeBodyPart(); //jaf:DataHandler能自動感知文件的類型 images/jpeg DataHandler dh = new DataHandler(new FileDataSource("d:/2.jpg")); part2.setDataHandler(dh); part2.setContentID("mm"); //描述各部分之間的關係MimeMultiPart MimeMultipart multi = new MimeMultipart(); multi.addBodyPart(part1); multi.addBodyPart(part2); multi.setSubType("related");//描述關係 //加到MimeMessage中 message.setContent(multi); message.saveChanges(); ts.send(message,message.getAllRecipients()); } }