上一篇JavaMail入門第三篇 發送郵件中,我們學會了如何用JavaMail API提供的Transport類發送郵件,同樣,JavaMail API中也提供了一些專門的類來對郵件的接收進行相關的操作,在介紹這些類之前,我們先來了解下郵件接收API的體系結構,JavaMail API中定義了一個java.mail.Store類,它用于執行郵件的接收任務,我們在程式中調用這個類中的方法可以擷取郵箱中的各個郵件夾的資訊。JavaMail使用Folder對象表示郵件夾,通過Folder對象的方法可以擷取郵件夾中的所有郵件資訊,而我們知道郵件的資訊可以使用Message對象來表示,Message類中就包含了操作郵件的各種方法了,例如擷取郵件的發送者,主題,正文内容,發送時間等,它們工作關系如下:

1、從Session對象中獲得實作了某種郵件發送協定的Store對象;
2、登入郵箱,連接配接上POP3或者IMAP4伺服器;
3、調用Store的getFolder方法,擷取郵箱中的某個郵件夾的Folder對象;
4、調用Folder對象中的getMessage或getMessages方法,擷取郵件夾中的某一封郵件或者是所有郵件,每一封的郵件以一個Message對象傳回。
接下來我們用以上類來接收郵件
1 import java.util.Properties;
2
3 import javax.mail.Address;
4 import javax.mail.Folder;
5 import javax.mail.Message;
6 import javax.mail.Session;
7 import javax.mail.Store;
8
9 class MailReceives {
10 public static void main(String[] args) throws Exception {
11 // 定義連接配接POP3伺服器的屬性資訊
12 String pop3Server = "pop.qq.com";
13 String protocol = "pop3";
14 String username = "[email protected]";
15 String password = "****************"; // QQ郵箱的SMTP的授權碼,什麼是授權碼,它又是如何設定?
16
17 Properties props = new Properties();
18 props.setProperty("mail.transport.protocol", protocol); // 使用的協定(JavaMail規範要求)
19 props.setProperty("mail.smtp.host", pop3Server); // 發件人的郵箱的 SMTP伺服器位址
20
21 // 擷取連接配接
22 Session session = Session.getDefaultInstance(props);
23 session.setDebug(false);
24
25 // 擷取Store對象
26 Store store = session.getStore(protocol);
27 store.connect(pop3Server, username, password); // POP3伺服器的登陸認證
28
29 // 通過POP3協定獲得Store對象調用這個方法時,郵件夾名稱隻能指定為"INBOX"
30 Folder folder = store.getFolder("INBOX");// 獲得使用者的郵件帳戶
31 folder.open(Folder.READ_WRITE); // 設定對郵件帳戶的通路權限
32
33 Message[] messages = folder.getMessages();// 得到郵箱帳戶中的所有郵件
34
35 for (Message message : messages) {
36 String subject = message.getSubject();// 獲得郵件主題
37 Address from = (Address) message.getFrom()[0];// 獲得發送者位址
38 System.out.println("郵件的主題為: " + subject + "\t發件人位址為: " + from);
39 System.out.println("郵件的内容為:");
40 message.writeTo(System.out);// 輸出郵件内容到控制台
41 }
42
43 folder.close(false);// 關閉郵件夾對象
44 store.close(); // 關閉連接配接對象
45 }
46 }
控制台輸出結果:
可以看到控制台輸出的是郵件的原始内容,還未被解析,是以需要經過解析才能閱讀,下一篇JavaMail入門第五篇 解析郵件将講解如何解析郵件。