上兩篇提到如何發送郵件:JavaMail 發送 html 格式、帶附件的郵件, JavaMail 簡單案例。本文再演示下,如何讀取郵箱上的郵件。
郵件內容的數據格式種類比較多,用戶直接閱讀郵件比較常見,通過程序解讀郵件比較少見,所以,本文的例子只演示讀取郵件信封上的內容,例如郵件主題、發件人。若郵件內容是純文本格式,也能直接讀取。若郵件內容是非文本格式,可以通過分解獲取到的 Message 繼續解讀,不過這種情況不在本文演示范圍內。
CheckingMail, 查詢郵件,根據提供的 pop3 服務器域名,郵箱賬號,密碼,查詢該郵箱賬號里面的郵件。只查看郵件主題,發件人,郵件內容類型,如果是純文本內容,也會顯示出現。注意點:如果 InternetAddress 的 personName 包含中文,直接調用 InternetAddress.toString() 會顯示不正常,需要單獨調用 InternetAddress 的 getPersonal() 提取發件人姓名,才能正常顯示發件人姓名。
CheckingMailDemo, 演示郵件查詢。
具體代碼:
CheckingMail, 查詢郵件。
import static java.lang.System.out; import java.util.Properties; import javax.mail.Address; import javax.mail.Folder; import javax.mail.Message; import javax.mail.PasswordAuthentication; import javax.mail.Session; import javax.mail.Store; import javax.mail.internet.InternetAddress; public class CheckingMail { private String username; private String password; private String host; private String port = "995"; public CheckingMail(String host, String username, String password){ this.host = host; this.username = username; this.password = password; } public void check() throws Exception{ Properties props = new Properties(); props.put("mail.pop3.host", host); props.put("mail.pop3.port", port); props.put("mail.pop3.stattls.enable", "true"); Session session = Session.getInstance(props, new javax.mail.Authenticator(){ protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication(username, password); } }); Store store = session.getStore("pop3s"); store.connect(host, username, password); System.out.println(" connect completed "); Folder folder = store.getFolder("INBOX"); folder.open(Folder.READ_ONLY); Message[] messages = folder.getMessages(); System.out.println(" the number of message retrieved from mailbox : " + messages.length); for (int i = 0 ; i < messages.length; i++){ Message msg = messages[i]; InternetAddress address = (InternetAddress) msg.getFrom()[0]; out.println(" [ #" + i + " ] "); out.println( "Subject : " + msg.getSubject()); out.println("From : " + address.getPersonal() + "<" + address.getAddress() + ">"); out.println("ContentType : " + msg.getContentType()); out.println("Content Detail : " + msg.getContent().toString()); out.println(); } out.println(" Eamil retrieved completely "); folder.close(false); store.close(); } }
CheckingMailDemo, 演示郵件查詢。
public class CheckingMailDemo { public static void main() { try { String host = "pop.163.com"; final String username = "yourUserName@163.com"; final String password = "yourPassword"; CheckingMail checkingMail = new CheckingMail(host, username, password); checkingMail.check(); } catch (Exception e) { e.printStackTrace(); } } }
參考資料