javax.mail.Message是一個抽象類,需要使用其子類javax.mail.MimeMessage來創建Message類的實例對象。如果要是僅僅創建包含文本內容的簡單郵件只需要使用過MimeMessage類即可。但是要是創建的郵件中內嵌有資源(如圖片,超鏈接,html)或多個附件,則需要同時使用JavaMail API中的MimeMessage、javax.mail.internet.MimeBodyPart和javax.mail.internet.MimeMultipart等類。
- MimeMessage:表示整封郵件
- MimeBodyPart:表示郵件的一個MIME消息
- MimeMultipart:表示一個由多個MIME消息組合成的組合MIME消息
2. MimeMultipart對象用來組合多個MIME消息,其中的每個MIME消息分別用一個MimeBodyPart對象表示並通過MimeMultipart.addBodyPart(BodyPart bp)方法加入到MimeMultipart對象中。
3. 如果MimeBodyPart對象表示的MIME消息又是一個MIME組合消息,那麼它的內容又需要使用一個MimeMultipart對象來表示,並通過MimeBodyPart.setContent(MimeMultipart mp)方法設置到MimeBodyPart對象中。同代表整個郵件的MimeMultipart對象一樣,這個MimeMultipart對象中的每一組成單元也分別有一個MimeBodyPart對象表示。
- 有三個常量:TO(表示主要收件人)、CC(郵件的抄送接收者)、BCC(郵件的暗送接收者)
MimeMessage(Session) MimeMessage(Session, InputStream) |
Session中包含一系列的鍵值對,用於設置郵件發送前的信息設置如"mail.smtp.host"表示服務器的主機名。ImputStream 表示郵件的內容將從輸入流對象中獲取。 |
setFrom() setFrom(Address) |
第一個中的地址將由Session中的"mail.user"屬性設置,Address是抽象類通過InternetAddress類實例化 |
setRecipient(Message.RecipientType, Address) setRecipients(Message.RecipientType, Address[]) |
設置接收郵件的用戶或一組用戶,並且可以指定接收用戶的類型TO、CC、BCC |
addRecipient(Message.RecipientType, Address) addRecipients(Message.RecipientType, Address[]) |
增加一個或一組收件人的地址 |
setSendData(java.util.Date data) | 設置郵件發送的日期 |
setSubject(java.lang.String) setSubject(String subject, String charset) |
設置郵件主題並且指定字符集,當MIME使用BASE64或 Quote-Printable編碼是需要指定字符集 |
addHeader(String name, String value) setHeader(String name, String value) |
設置消息頭字段的名稱和消息頭字段的值 |
setContent(Object obj, String type) setContent(Multipart mp) |
設置MimeMessage對象的郵件體 |
setText(java.lang.String) | 設置郵件的簡單的純文本內容 |
setFlags(Flags.Flag flag, boolean set ) | 用於設置有的已讀標記、刪除標記等 |
saveChanges() | 更新並保存MimeMesssage中的 數據,通常是在發送MimeMessage對象封裝的消息前調用此函數 |
writeTo(OutputStream os) |
把MimeMessage對象中數據輸出到一個RFC822格式的輸出流中。第二個參數用於指定輸出時應該忽略哪些字段。 |
writeTo(OutputStream os, String[] ignoreList) | |
String from = "[email protected]";
String to = "[email protected]";
String subject = "This is a test!!";
Properties props = new Properties();
Session session = Session.getInstance(props );
Message mailMessage =new MimeMessage(session);
mailMessage.setFrom(new InternetAddress(from));
mailMessage.setRecipient(RecipientType.TO, new InternetAddress(to));
mailMessage.setSubject(subject);
mailMessage.setText("hello, world!");
mailMessage.setSentDate(new Date());
mailMessage.writeTo(new FileOutputStream("D:\\test.eml"));
例二:創建HTML格式的郵件要使用MimeMessage函數中setContent(Object obj, String type)來指定郵件正文的String對象MIME類型爲"text/html"
下面的例子中在郵件的這個文中插入一個網絡圖片
String from = "[email protected]";
String to= "[email protected], [email protected]";
String body = "<h4>歡迎大家閱讀郵件</h4>" +
"<img src= \"http://c.hiphotos.baidu.com/news/pic/item/a08b87d6277f9e2f11f6d7951d30e924b999f368.jpg\">";
String subject = "Test";
Properties props = new Properties();
Session session = Session.getInstance(props);
Message msg= new MimeMessage(session);
msg.setFrom(new InternetAddress(from));
msg.setRecipients(RecipientType.TO, InternetAddress.parse(to));
msg.setSubject(subject);
msg.setSentDate(new Date());
//設置HTML格式的郵件正文
msg.setContent(body , "text/html;charset=gb2312");
msg.saveChanges();
msg.writeTo(new FileOutputStream("d:\\test.eml"));