JavaMail API - 核心類



JavaMail API 由一些用於傳送、讀取和刪除電子郵件的介面和類組成。儘管 JavaMail API 中有很多包,但我們將介紹 Java Mail API 中經常使用的兩個主要包:javax.mailjavax.mail.internet 包。這些包包含所有 JavaMail 核心類。它們是

描述
javax.mail.SessionAPI 的關鍵類。一個多執行緒物件代表連線工廠。
javax.mail.Message一個抽象類,用於類比電子郵件訊息。子類提供實際的實現。
javax.mail.Address一個抽象類,用於模擬訊息中的地址(發件人和收件人地址)。子類提供具體的實現。
javax.mail.Authenticator一個用於保護郵件伺服器上郵件資源的抽象類。
javax.mail.Transport一個抽象類,用於模擬用於傳送電子郵件訊息的訊息傳輸機制。
javax.mail.Store一個抽象類,用於模擬郵件儲存及其訪問協議,用於儲存和檢索郵件。Store 分為多個資料夾。
javax.mail.Folder一個抽象類,表示郵件訊息的資料夾。它可以包含子資料夾。
javax.mail.internet.MimeMessageMessage 是一個抽象類,因此必須與子類一起使用;在大多數情況下,您將使用 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 的關係

JavaMail API Store and Folder Relation

如我們所見,對於每個使用者帳戶,伺服器都有一個儲存,它是使用者訊息的儲存。儲存分為多個資料夾,“收件箱”資料夾是包含電子郵件訊息的主要資料夾。資料夾可以包含訊息和子資料夾。

廣告

© . All rights reserved.