位置:首頁 > Java技術 > JavaMail > JavaMail API 核心類

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 formuser@host.domain or Personal Name <user@host.domain>.

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

會話類

會話類是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("manisha@gmail.com"); 
  • 創建地址的另一種方式是通過將名稱與電子郵件地址:

    Address address = new InternetAddress("manisha@gmail.com", 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

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