JavaMail API 核心類


JavaMail API包含了一些介面,用於傳送,讀取和刪除電子郵件訊息的類。雖然有許多軟體包在JavaMail API中,頻繁用於Java郵件API主要有兩個包:javax.mail和javax.mail.internet。這些軟體包包含所有的JavaMail核心類。它們分別是:

描述
javax.mail.Session The key class of the API. A multithreaded object represents the connection factory.
javax.mail.Message An abstract class that models an e-mail message. Subclasses provide the actual implementations.
javax.mail.Address An abstract class that models the addresses (from and to addresses) in a message. Subclasses provide the specific implementations.
javax.mail.Authenticator An abstract class used to protect mail resources on the mail server.
javax.mail.Transport An abstract class that models a message transport mechanism for sending an e-mail message.
javax.mail.Store An abstract class that models a message store and its access protocol, for storing and retrieving messages. A Store is divided into Folders.
javax.mail.Folder An abstract class that represents a folder of mail messages. It can contain subfolders.
javax.mail.internet.MimeMessage Message is an abstract class, hence must work with a subclass; in most cases, you’ll use a MimeMessage. A MimeMessage is an e-mail message that understands MIME types and headers.
javax.mail.internet.InternetAddress This class represents an Internet email address using the syntax of RFC822. Typical address syntax is of the form[email protected] or Personal Name <[email protected]>.

讓我們研究這些類的細節,並在隨後的章節中,我們將使用所有這些研究的例子。

對談類

對談類是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類是私有的。因此,對談類提供了兩個方法(如下所示),它獲得了Session物件。

  • getDefaultInstance(): 有兩種方法使用getDefaultInstance()方法來獲取對談物件。它返回預設的對談。

    public static Session getDefaultInstance(Properties props)
    public static Session getDefaultInstance(Properties props,Authenticator auth)
  • getInstance(): 有兩種方法使用getInstance()方法來獲取對談物件。它返回新的對談。

    public static Session getInstance(Properties props)
    public static Session getInstance(Properties props,Authenticator auth)

訊息類

與Session物件建立的,我們現在繼續建立將要傳送的訊息。該訊息型別將是javax.mail.Message。

  • Message是一個抽象類。因此,它的子類javax.mail.internet.MimeMessage類大多使用。

  • 建立訊息,你需要傳遞對談物件中的MimeMessage類別建構函式。例如:

    MimeMessage message=new MimeMessage(session);
  • 一旦訊息物件被建立,我們需要儲存的資訊在裡面。訊息類實現了javax.mail.Part介面,當使用javax.mail.internet。的MimeMessage實現javax.mail.internet.MimePart。您可以使用message.setContent()或mimeMessage.setText()來儲存內容。

  • MimeMessage類的常用的方法有

    方法 描述
    public void setFrom(Address address) used to set the from header field.
    public void addRecipients(Message.RecipientType type, String addresses) used to add the given address to the recipient type.
    public void setSubject(String subject) used to set the subject header field.
    public void setText(String textmessage) used to set the text as the message content using text/plain MIME type.

地址類

現在,我們有一個對談和訊息(儲存在它裡面的內容)的物件,我們需要使用地址物件,以解決這封郵件。

  • Address 是一個抽象類。因此,它的子類javax.mail.internet.InternetAddress類大多被使用。

  • Address 可以通過剛好路過的電子郵件地址來建立:

    Address address = new InternetAddress("[email protected]"); 
  • 建立地址的另一種方式是通過將名稱與電子郵件地址:

    Address address = new InternetAddress("[email protected]", Manisha); 
  • 您還可以設定收件人,發件人,抄送,密件抄送(To, From, CC, BCC)欄位如下  fields as below

    • message.setFrom(address)

    • message.addRecipient(type, address)

    • 三種預定義的地址型別是與這些值中的一個物件:

      • Message.RecipientType.TO

      • Message.RecipientType.CC

      • Message.RecipientType.BCC

Authenticator類

Authenticator 類表示懂得如何獲得認證的網路連線的物件。通常情況下,它會通過提示資訊的使用者這樣做。

  • 身份驗證是一個抽象類。您可以建立一個子類PasswordAuthentication,通過使用者名和密碼給它的構造。

  • 必須註冊認證者與當您建立對談物件的對談。

以下是驗證器使用的一個例子:

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);
  • 傳送訊息的另一種方法是通過從對談您的協定得到一個特定的範例,傳遞下去的使用者名和密碼(空白,如果不必要的),傳送訊息,並關閉連線:

    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物件存取訊息儲存。大多數郵件儲存需要進行身份驗證,才允許存取的使用者。 connect方法進行身份驗證。

Store store = session.getStore("pop3");
store.connect(host, username, password);

Folder 類

folder 是表示一個檔案夾的郵件訊息的抽象類。子類實現協定的具體檔案夾。檔案夾可以包含子檔案夾,以及訊息,從而提供了一種分層結構。

連線到儲存後,您就可以得到一個檔案夾,必須先開啟,然後才能從中讀取訊息。

Folder folder = store.getFolder("INBOX");
folder.open(Folder.READ_ONLY);
Message message[] = folder.getMessages();

getFolder(字串name)方法為一個Folder 物件返回指定的子檔案夾。關閉一次讀郵件完成兩者的儲存和檔案夾的連線。

我們可以看到下面的圖片的儲存和檔案夾的關係:

JavaMail API Store and Folder Relation

正如我們所看到的,每個使用者帳戶,該伺服器有一個商店,這是使用者的資訊的儲存。該儲存分為檔案夾,並在“收件箱”檔案夾,其中包含電子郵件的主要檔案夾。檔案夾可以包含郵件和子檔案夾。