前面介紹了電子郵件系統的基本知識,那篇部落格知識對基礎理論知識做一些簡要介紹,並不妨礙我們做郵件開發。現在開始Java郵件開發。
一、JavaMail簡介
JavaMail,顧名思義,提供給開發人員處理電子郵件相關的編程介面。它是Sun發布的用來處理email的API。它可以方便地執行一些常用的郵件傳輸。JavaMail API是Sun公司為方便Java開發人員在應用程式中實現郵件發送和接收功能而提供的一套標準開發包,它支援一些常用的郵件協議,如:SMTP、POP3、IMAP。開發人員使用JavaMail API編寫郵件處理軟體時,無須考慮郵件協議底層的實現細節,只要調用JavaMail開發包中相應的API類就可以了。
二、JavaMail開發環境
在進行JavaMail開發之前必須要匯入相應的jar包。該jar包可以到oracle的官網上面下載:http://www.oracle.com/technetwork/java/javamail/index.html。
下載完成後解壓可以得到如下一個目錄:
其中mail.jar:就是開發javamail程式所必須要用到的核心開發包。
demo子目錄:樣本程式。
demo子目錄:樣本程式。
lib子目錄:該目錄下包含5個獨立的郵件開發包:smtp.jar、pop3.jar、imap.jar和mailapi.jar,這5個jar檔案是對mail.jar檔案的分類封裝。其中mailapi.jar封裝了建立郵件內容和面向普通開發人員調用郵件發送和接收的API類,其它三個jar檔案則是封裝了它們名稱相對應協議的服務實現程式。。在編譯Java郵件程式時,只需要mailapi.jar檔案即可,但是,在運行時必須要有相應郵件協議的底層服務實現程式。如果應用程式中只需要使用到郵件發送功能,則可以只安裝smtp.jar和mailapi.jar這兩個檔案,如果應用程式只需要使用郵件的接收功能,則可以只安裝pop3.jar或imap.jar和mailapi.jar這兩個jar檔案,而不用安裝整個mail.jar檔案。
Lib目錄如下:
三、JavaMail API的介紹
JavaMail API按其功能劃分通常分為如下三大類“:
1、建立和解析郵件內容的API。Message類是建立和解析郵件的核心API。它的執行個體對象代表了一封電子郵件。
2、發送郵件的API。Transport類是發送郵件的核心API類,它的執行個體對象代表實現了某個郵件發送協議的郵件發送對象,如SMTP協議。
3、內送郵件的API。Store類是內送郵件的核心API類,它的執行個體對象代表了實現某個郵件接收協議的郵件接收對象,例如POP3協議。
JavaMail的工作流程如下:
在這個工作流程中,Message、Session、Transport、Store四個對象緊密相連的完成一封電子郵件的發送和接收。我們只需要瞭解這個四個核心API的功能和作用,知道他們的工作關係和電子郵件的工作流程,就能夠很容易的編寫出JavaMail來了。對於JavaMail的輔助類而言,當我們需要他們的時候可以順藤摸瓜,查看文檔來解決。
核心API的介紹:
Message
Message 類是建立和解析郵件的核心API,它的執行個體對象代表一封電子郵件。在用戶端發送郵件時,先穿件郵件的API,將建立的郵件的資料封裝到Message對象中,然後把這個對象傳遞給郵件發送API發送出去。在用戶端接收到郵件時,郵件接收API把接收的油價資料裝在Message的執行個體對象中,用戶端在使用郵件解析API從這個對象中解析出來接收到的郵件資料。
Session
Session 類用於定義整個應用程式所需的環境資訊,以及收集用戶端與郵件伺服器建立網路連接的會話資訊,如郵件伺服器的主機名稱、連接埠號碼、採用的郵件發送和接收協議等。Session對象根據這些會話資訊構建郵件收發的Store和Transport對象,以及為用戶端建立Message對象提供資訊支援。
Transport
Transport 類是發送郵件的核心API類,它的執行個體對象,代表實現了某個郵件發送協議的郵件發送對象,例如SMTP 協議。用戶端程式建立好Message對象後,只需要使用郵件發送API得到 Transport 對象,然後把 Message 對象傳遞給 Transport 對象,並調用它的發送方法,就可以把郵件發送給指定的SMTP伺服器。
Store
Store 類是內送郵件的核心API類,它的執行個體對象代表實現某個郵件接收協議的郵件接收對象,例如POP3和IMAP協議。用戶端程式內送郵件時,只需要使用郵件接收API得到Store對象,然後調用Store對象的接收方法,就可以從指定的 POP3伺服器中獲得郵件資料,並把這些郵件資料封裝到表示郵件的Message對象中。
四、執行個體
1 public class JavaMail_01 { 2 public static void main(String[] args) throws Exception { 3 Properties props = new Properties(); 4 props.setProperty("mail.smtp.auth", "true"); 5 props.setProperty("mail.transport.protocol", "smtp"); 6 7 Session session = Session.getInstance(props); 8 session.setDebug(true); 9 10 Message msg = new MimeMessage(session);11 msg.setSubject("這是一個測試程式....");12 msg.setText("你好!這是我的第一個javamail程式---陳明");13 msg.setFrom(new InternetAddress("******@163.com"));14 15 Transport transport = session.getTransport();16 transport.connect("smtp.163.com", 25, "*******", "********");17 transport.sendMessage(msg,new Address[]{new InternetAddress("chenssy995812509@sina.cn")});18 19 System.out.println("郵件發送成功...");20 transport.close();21 }22 }