1. 程式人生 > >javamail使用IMAP協議收取gmail郵件

javamail使用IMAP協議收取gmail郵件

年底了,績效是逃不開的話題,為總結這一年來的工作情況,檢視郵件是非常必要的。但是,郵件太多,如何篩選和保留成為一個問題,因此想到實現個自動統計郵件內容的工具,今天分享使用IMAP協議收取gmail郵件的實現方式。

準備環境

新建一個java專案,並從oracle官網下載javamail.jar檔案,匯入到專案中。

定義SMTP連線詳情

首先,我們需要定義連線伺服器相關的配置詳情,如埠/主機名等。
在專案根目錄下建立smtp.properties檔案,並輸入以下內容。

mail.smtp.host=smtp.gmail.com
mail.smtp.socketFactory
.port=465 mail.smtp.socketFactory.class=javax.net.ssl.SSLSocketFactory mail.smtp.auth=true mail.smtp.port=465

載入配置資訊

定義配置資訊後,我們需要使用方法載入這些資訊,並建立一個郵件會話。

props.load(new FileInputStream(new File("smtp.properties")));
Session session = Session.getDefaultInstance(props, null);

連線

建立一個store(javax.mail.Store)連線郵件伺服器。

Store store = session.getStore("imaps");
store.connect("smtp.gmail.com", "*************@gmail.com","your_password");

讀取收件箱

定義讀取gmail收件箱目錄。

Folder inbox = store.getFolder("inbox");
inbox.open(Folder.READ_ONLY);

讀取郵件

獲取到收件箱目錄後,就可以很容易的獲取到郵件相關的內容了,下面是獲取郵件主題的方法。

Message[] messages = inbox.getMessages();
System.out.println("------------------------------"
); for (int i = 0; i < 10; i++) { System.out.println("Mail Subject:- " + messages[i].getSubject()); }

完整原始碼

下面是完整的原始碼

public class SimpleStoreMails {
    public static void main(String[] args) {
        SimpleStoreMails mail = new SimpleStoreMails();
        mail.read();
    }

    public void read() {
        Properties props = new Properties();
        try{
            props.load(new FileInputStream(new File("smtp.properties")));
            Session session = Session.getDefaultInstance(props, null);

            Store store = session.getStore("imaps");
            store.connect(POP3_SERVER, USER, PWD);

            Folder inbox = store.getFolder("inbox");
            inbox.open(Folder.READ_ONLY);

            Message[] messages = inbox.getMessages();

            for (int i = 0; i < inbox.getMessageCount(); i++){
                Message message = messages[i];
                Date date = message.getSentDate();
                System.out.println("Mail Subject:- " + message.getSubject());
                System.out.println("Mail Content Type:- " + message.getContentType());
                System.out.println("Mail Sent Date:- " + date);
            }

            inbox.close(true);
            store.close();
        }catch (Exception e){
            e.printStackTrace();
        }
    }   
}