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 類表示懂得如何獲得認證的網路連線的物件。通常情況下,它會通過提示資訊的使用者這樣做。
身份驗證是一個抽象類。您可以建立一個子類PasswordAuthentication,通過使用者名和密碼給它的構造。
必須註冊認證者與當您建立對談物件的對談。
以下是驗證器使用的一個例子:
Properties props = new Properties(); //Override props with any customized data PasswordAuthentication auth = new PasswordAuthentication("manisha", "pswrd") Session session = Session.getDefaultInstance(props, auth);
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物件存取訊息儲存。大多數郵件儲存需要進行身份驗證,才允許存取的使用者。 connect方法進行身份驗證。
Store store = session.getStore("pop3"); store.connect(host, username, password);
folder 是表示一個檔案夾的郵件訊息的抽象類。子類實現協定的具體檔案夾。檔案夾可以包含子檔案夾,以及訊息,從而提供了一種分層結構。
連線到儲存後,您就可以得到一個檔案夾,必須先開啟,然後才能從中讀取訊息。
Folder folder = store.getFolder("INBOX"); folder.open(Folder.READ_ONLY); Message message[] = folder.getMessages();
getFolder(字串name)方法為一個Folder 物件返回指定的子檔案夾。關閉一次讀郵件完成兩者的儲存和檔案夾的連線。
我們可以看到下面的圖片的儲存和檔案夾的關係:
正如我們所看到的,每個使用者帳戶,該伺服器有一個商店,這是使用者的資訊的儲存。該儲存分為檔案夾,並在“收件箱”檔案夾,其中包含電子郵件的主要檔案夾。檔案夾可以包含郵件和子檔案夾。