上一篇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 = "123456@qq.com"; 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入門第五篇 解析郵件將講解如何解析郵件。
