JavaMail入門:建立純文字、HTML格式的郵件

來源:互聯網
上載者:User

標籤:

轉自:http://haolloyin.blog.51cto.com/1177454/353849/

 

在 http://java.sun.com/products/javamail/ 下載了 JavaMail 1.4.3 版本,如果所用 JDK 是 6.0 則不用再下載 activation 。下載得到的是 javamail-1.4.3.zip 的壓縮包,解壓得到 mail.jar 包,配置環境變數之後就可以使用了。從解壓後的檔案夾中有 JavaMail-1.4.pdf 這個 JavaMail 的設計規範文檔。雖然是英文,但是稍微看一看我就從中截了 4 張比較有用的圖片,覺得有必要瞭解一下,如下:

1、JavaMail 架構層次圖:

2、JavaMail 的類層次圖:

3、JavaMail 中幾個最重要類的類圖:

4、MimeMessage 類的具體類圖:

  JavaMail 文檔有時間慢慢理解,使用 JavaMail 開發郵件應用程式可以參考解壓之後的 JavaMail 開發文檔,下面用代碼實現建立一個純文字格式的郵件:

純文字格式的郵件:

  1. import java.io.FileOutputStream;  
  2. import java.util.Date;  
  3. import java.util.Properties;  
  4.  
  5. import javax.mail.Message;  
  6. import javax.mail.Session;  
  7. import javax.mail.internet.InternetAddress;  
  8. import javax.mail.internet.MimeMessage;  
  9. /**  
  10.  * 建立純文字格式的郵件,儲存為Outlook 的 ".eml" 郵件格式  
  11.  * @author haolloyin  
  12.  */ 
  13. public class TextMessage {  
  14.     public static void main(String[] args) throws Exception{  
  15.           
  16.         String from = "[email protected]";  
  17.         String to = "[email protected]";  
  18.         String subject = "建立一個純文字郵件!";  
  19.         String body = "純文字郵件測試!!!";  
  20.           
  21.         // 建立該郵件應用程式所需的環境資訊以及會話資訊  
  22.         Session session = Session.getDefaultInstance(new Properties());  
  23.           
  24.         // 根據上面的 Session 執行個體建立 MimeMessage 執行個體,即一封郵件  
  25.         MimeMessage msg = new MimeMessage(session);  
  26.           
  27.         // 設定寄件者地址  
  28.         msg.setFrom(new InternetAddress(from));  
  29.           
  30.         // 設定收件者地址  
  31.         msg.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to));  
  32.           
  33.         // 設定 E-mail 主題  
  34.         msg.setSubject(subject);  
  35.           
  36.         // 設定發送時間  
  37.         msg.setSentDate(new Date());  
  38.           
  39.         // 設定 E-mail 本文部分  
  40.         msg.setText(body);  
  41.           
  42.         // 必須儲存對該 MimeMessage 執行個體的更改  
  43.         msg.saveChanges();  
  44.           
  45.         // 將 msg 對象中內容寫入當前檔案的textMail.eml檔案中  
  46.         msg.writeTo(new FileOutputStream("textMail.eml"));  
  47.     }  

編譯運行,得到 textMail.eml 檔案,雙擊自動用 Outlook 開啟,如:

  

 單擊 Outlook 中的“檔案”—> “屬性”—> “詳細資料”可看到該郵件的郵件標頭,再點擊“郵件來源”可看到該郵件的源檔案內容,如:

注意上面被選擇的內容,Content-Transfer-Encoding: base64 說明是被用 BASE64 編碼轉換過的了,因此郵件的本文部分如:

 因為郵件中的 subject 和 body 都用到了中文,所以字元集編碼時 charset=GBK 。

 HTML 格式的郵件:

再用同樣的方式建立一封 HTML 格式的郵件,對上面的代碼稍作修改即可,代碼如下:

  1. import java.io.FileOutputStream;  
  2. import java.util.Date;  
  3. import java.util.Properties;  
  4.  
  5. import javax.mail.Message;  
  6. import javax.mail.Session;  
  7. import javax.mail.internet.InternetAddress;  
  8. import javax.mail.internet.MimeMessage;  
  9.  
  10. /**  
  11.  * 建立 HTML 格式的郵件,儲存為 Outlook 的 ".eml" 檔案  
  12.  * @author haolloyin  
  13.  */ 
  14. public class HtmlMessage {  
  15.     public static void main(String[] args) throws Exception{  
  16.  
  17.         String from = "[email protected]";  
  18.         String to = "[email protected]";  
  19.         String subject = "建立一個 HTML 格式郵件!";  
  20.         String body = "<h4>HTML 格式的郵件測試!!!</h4> " +  
  21.         "<a href = http://haolloyin.blog.51cto.com/> 螞蟻</a>";  
  22.           
  23.         // 建立該郵件應用程式所需的環境資訊以及會話資訊  
  24.         Session session = Session.getDefaultInstance(new Properties());  
  25.           
  26.         // 根據上面的 Session 執行個體建立 MimeMessage 執行個體,即一封郵件  
  27.         MimeMessage msg = new MimeMessage(session);  
  28.           
  29.         // 設定寄件者地址  
  30.         msg.setFrom(new InternetAddress(from));  
  31.           
  32.         // 設定收件者地址  
  33.         msg.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to));  
  34.           
  35.         // 設定 E-mail 主題  
  36.         msg.setSubject(subject);  
  37.           
  38.         // 設定發送時間  
  39.         msg.setSentDate(new Date());  
  40.           
  41.         // 設定 E-mail 本文部分  
  42. //      msg.setText(body);  
  43.         msg.setContent(body, "text/html;charset = gbk");  
  44.           
  45.         // 儲存對該 MimeMessage 執行個體的更改  
  46.         msg.saveChanges();  
  47.           
  48.         // 將 msg 對象中內容寫入檔案  
  49.         msg.writeTo(new FileOutputStream("htmlMail.eml"));  
  50.     }  

注意上面代碼中的 msg.setContent(body, "text/html;charset = gbk");  語句,雙擊產生的檔案自動用 Outlook 開啟,如:

 我們注意到編碼方式變成了 quoted-printable ,它與 BASE64 編碼類別似,都是將純粹的位元據轉換成可以列印的 ASCII 字元,具體的區別和用途請查閱資料。

目前的還不可以給指定的郵箱發送郵件,只是建立一封郵件而已。

小結:

1、瞭解 MIME 協議以及 MIME 郵件的組織圖對理解上面給出的類圖很有協助;

2、如果郵件的 subject 和 body 都不涉及中文,那麼整封郵件都不會被轉碼,而是用最原始的 7bit 編碼格式,可以試一試看一下效果。

我的相關文章:

圖解使用Telnet程式手工發送郵件

簡單的E-mail發送端程式的Java實現

圖解使用telnet程式手工內送郵件及其過程

JavaMail入門:建立純文字、HTML格式的郵件

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.