- JavaMail API 教程
- JavaMail - 首頁
- JavaMail API - 概述
- JavaMail - 環境設定
- JavaMail - 核心類
- JavaMail - 傳送郵件
- JavaMail - 檢查郵件
- JavaMail - 獲取郵件
- JavaMail - 身份驗證
- JavaMail - 回覆郵件
- JavaMail - 轉發郵件
- JavaMail - 刪除郵件
- JavaMail - Gmail SMTP 伺服器
- JavaMail - 資料夾管理
- JavaMail - 配額管理
- JavaMail - 退信
- JavaMail API 協議
- JavaMail - SMTP 伺服器
- JavaMail - IMAP 伺服器
- JavaMail - POP3 伺服器
- JavaMail API 有用資源
- JavaMail - 快速指南
- JavaMail - 有用資源
- JavaMail - 討論
JavaMail API - 核心類
JavaMail API 由一些用於傳送、讀取和刪除電子郵件的介面和類組成。儘管 JavaMail API 中有很多包,但我們將介紹 Java Mail API 中經常使用的兩個主要包:javax.mail 和 javax.mail.internet 包。這些包包含所有 JavaMail 核心類。它們是
| 類 | 描述 |
|---|---|
| javax.mail.Session | API 的關鍵類。一個多執行緒物件代表連線工廠。 |
| javax.mail.Message | 一個抽象類,用於類比電子郵件訊息。子類提供實際的實現。 |
| javax.mail.Address | 一個抽象類,用於模擬訊息中的地址(發件人和收件人地址)。子類提供具體的實現。 |
| javax.mail.Authenticator | 一個用於保護郵件伺服器上郵件資源的抽象類。 |
| javax.mail.Transport | 一個抽象類,用於模擬用於傳送電子郵件訊息的訊息傳輸機制。 |
| javax.mail.Store | 一個抽象類,用於模擬郵件儲存及其訪問協議,用於儲存和檢索郵件。Store 分為多個資料夾。 |
| javax.mail.Folder | 一個抽象類,表示郵件訊息的資料夾。它可以包含子資料夾。 |
| javax.mail.internet.MimeMessage | Message 是一個抽象類,因此必須與子類一起使用;在大多數情況下,您將使用 MimeMessage。MimeMessage 是一種瞭解 MIME 型別和標頭的電子郵件訊息。 |
| javax.mail.internet.InternetAddress | 此類使用 RFC822 的語法表示 Internet 電子郵件地址。典型的地址語法格式為user@host.domain 或個人姓名 <user@host.domain>。 |
讓我們詳細研究每個類,並在後續章節中學習使用每個類的示例。
Session 類
Session 類是 JavaMail API 的主要類,它不會被子類化。Session 物件充當 JavaMail API 的連線工廠,它處理配置設定和身份驗證。
Session 物件可以透過以下方式建立
透過查詢儲存在 JNDI 服務中的已管理物件
InitialContext ctx = new InitialContext(); Session session = (Session) ctx.lookup("usersMailSession");usersMailSession 是用作 Session 物件的已管理物件的 JNDI 名稱物件。usersMailSession 可以使用所需的名稱/值對引數建立和配置,包括郵件伺服器主機名、傳送郵件的使用者帳戶以及 Session 物件支援的協議等資訊。
建立 Session 物件的另一種方法是基於程式設計方法,您可以在其中使用java.util.Properties 物件覆蓋一些預設資訊,例如郵件伺服器名稱、使用者名稱、密碼以及可以在整個應用程式中共享的其他資訊。
Session 類的建構函式是private 的。因此,Session 類提供了兩種獲取Session 物件的方法(如下所示)。
getDefaultInstance():有兩種方法可以使用 getDefaultInstance() 方法獲取 Session 物件。它返回預設 Session。
public static Session getDefaultInstance(Properties props) public static Session getDefaultInstance(Properties props,Authenticator auth)
getInstance():有兩種方法可以使用 getInstance() 方法獲取 Session 物件。它返回新的 Session。
public static Session getInstance(Properties props) public static Session getInstance(Properties props,Authenticator auth)
Message 類
建立 Session 物件後,我們現在繼續建立將要傳送的訊息。訊息型別將為javax.mail.Message。
Message 是一個抽象類。因此,它的子類javax.mail.internet.MimeMessage 類最常使用。
要建立訊息,您需要在 MimeMessage 類建構函式中傳遞 Session 物件。例如
MimeMessage message=new MimeMessage(session);
建立訊息物件後,我們需要在其中儲存資訊。Message 類實現 javax.mail.Part 介面,而 javax.mail.internet. MimeMessage 實現 javax.mail.internet.MimePart。您可以使用 message.setContent() 或 mimeMessage.setText() 來儲存內容。
MimeMessage 類常用的方法是
方法 描述 public void setFrom(Address address) 用於設定發件人標頭欄位。 public void addRecipients(Message.RecipientType type, String addresses) 用於將給定地址新增到收件人型別。 public void setSubject(String subject) 用於設定主題標頭欄位。 public void setText(String textmessage) 用於使用 text/plain MIME 型別將文字設定為訊息內容。
Address 類
現在我們有了 Session 和 Message(其中儲存了內容)物件,我們需要使用Address 物件來為信件指定地址。
Address 是一個抽象類。因此,它的子類javax.mail.internet.InternetAddress 類最常使用。
Address 可以透過僅傳遞電子郵件地址來建立
Address address = new InternetAddress("manisha@gmail.com");建立 Address 的另一種方法是傳遞名稱以及電子郵件地址
Address address = new InternetAddress("manisha@gmail.com", Manisha);您還可以如下設定 To、From、CC、BCC 欄位
message.setFrom(address)
message.addRecipient(type, address)
三個預定義的地址型別是具有以下值之一的物件
Message.RecipientType.TO
Message.RecipientType.CC
Message.RecipientType.BCC
Authenticator 類
Authenticator 類表示一個知道如何獲取網路連線身份驗證的物件。通常,它會透過提示使用者輸入資訊來實現此目的。
Authenticator 是一個抽象類。您建立一個子類PasswordAuthentication,將使用者名稱和密碼傳遞給其建構函式。
在建立 Session 物件時,必須在 Session 中註冊 Authenticator。
以下是Authenticator 用法的示例
Properties props = new Properties();
//Override props with any customized data
PasswordAuthentication auth = new PasswordAuthentication("manisha", "pswrd")
Session session = Session.getDefaultInstance(props, auth);
Transport 類
Transport 類用作訊息傳輸機制。此類通常使用 SMTP 協議傳送訊息。
它是一個抽象類。
您可以透過呼叫靜態send() 方法來使用該類的預設版本
Transport.send(message);
傳送訊息的另一種方法是從 Session 中獲取特定協議的例項,傳遞使用者名稱和密碼(如果不需要則為空),傳送訊息並關閉連線
message.saveChanges(); // implicit with send() //Get transport for session Transport transport = session.getTransport("smtp"); //Connect transport.connect(host, username, password); //repeat if necessary transport.sendMessage(message, message.getAllRecipients()); //Done, close the connection transport.close();
Store 類
一個抽象類,用於模擬郵件儲存及其訪問協議,用於儲存和檢索郵件。子類提供實際的實現。Store 擴充套件了Service 類,該類提供了許多用於命名儲存、連線到儲存以及偵聽連線事件的常用方法。
客戶端透過獲取實現資料庫訪問協議的 Store 物件來訪問郵件儲存。大多數郵件儲存都需要使用者在允許訪問之前進行身份驗證。connect 方法執行該身份驗證。
Store store = session.getStore("pop3");
store.connect(host, username, password);
Folder 類
Folder 是一個抽象類,表示郵件訊息的資料夾。子類實現協議特定的資料夾。資料夾可以包含子資料夾以及訊息,從而提供分層結構。
連線到 Store 後,您可以獲取一個 Folder,必須在讀取郵件之前開啟它。
Folder folder = store.getFolder("INBOX");
folder.open(Folder.READ_ONLY);
Message message[] = folder.getMessages();
Folder 物件的getFolder(String name) 方法返回名為 name 的子資料夾。讀取完郵件後,關閉 Store 和 Folder 連線。
我們可以在下面的圖片中看到 Store 和 Folder 的關係
如我們所見,對於每個使用者帳戶,伺服器都有一個儲存,它是使用者訊息的儲存。儲存分為多個資料夾,“收件箱”資料夾是包含電子郵件訊息的主要資料夾。資料夾可以包含訊息和子資料夾。