[Java] JavaMail 查詢郵件


上兩篇提到如何發送郵件: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();
        }    
    }
}

 

參考資料

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM