上一篇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 = "gvbrkikfckxgbeac"; 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("郵件內容為:" + message.getContent()); 40 } 41 42 folder.close(false);// 關閉郵件夾對象 43 store.close(); // 關閉連接對象 44 } 45 }
Message中的getContent方法用於返回郵件體的內容,該方法把郵件體內容作為一個Java對象返回,對象的類型由郵件體內容確定,當郵件內容的MIME類型為"text/plain"時,返回的是一個String對象,郵件內容是一個"multipart"類型時,返回的是一個Multipart的一個實現類,郵件內容的MIME類型不確定時,返回的是與內容相關聯的InputStream流。