All About JAVA javamail的pop3以及IMAP方式讀取未讀郵件等操作

來源:互聯網
上載者:User

標籤:imap   javamail   java   pop3   未讀郵件   

/** * 可以在props下設定認證資訊,協議和連接埠資訊,逾時等資訊,這樣在store.connect的時候可以根 * 據props裡是否設定了認證資訊來選擇不帶參數的connect()或者如下有參數的connect(...)方法 *  store.connect(user, password); store.connect(host, user, password); */  Properties props = System.getProperties();  props.setProperty("mail.imap.host", "mail.**.**.cn");  props.setProperty("mail.imap.port", "143"); 具體連接埠資訊由郵件供應商確定  props.setProperty("mail.imap.connectiontimeout", "5000");  props.setProperty("mail.imap.timeout", "5000");

代碼本文:

Properties props = System.getProperties();Store store = null;// 用來存放郵件中檔案夾的,可以簡單的使用javax.mail.Folder類型,// 如果只是取未讀郵件數的話Folder類型就夠了IMAPFolder inbox = null; try {    Session session = Session.getDefaultInstance(props, null);    //如果使用pop3協議這裡imap改成pop3,如果使用ssl串連這裡應使用imaps    store = session.getStore("imap");     store.connect("mail.**.**.cn", "user","pwd");    System.out.println(store);    inbox = (IMAPFolder)store.getFolder("Inbox"); //取得收件匣對象    //如果需要在取得郵件數後將郵件置為已讀則這裡需要使用READ_WRITE,否則READ_ONLY就可以    inbox.open(Folder.READ_WRITE);     // Message messages[] = inbox.getMessages(); //擷取所有郵件    //建立搜尋條件FlagTerm,這裡FlagTerm繼承自SearchTerm,也就是說除了擷取未讀郵    //件的條件還有很多其他條件同樣繼承了SearchTerm的條件類,像根據寄件者,主題搜尋等,    // 還有複雜的邏輯搜尋類似:    //         //    SearchTerm orTerm = new OrTerm(       //            new FromStringTerm(from),       //            new SubjectTerm(subject)       //            );     //      // 可以上網搜尋SearchTerm擷取更多    FlagTerm ft =         new FlagTerm(new Flags(Flags.Flag.SEEN), false); //false代表未讀,true代表已讀    /**    * Flag 類型列舉如下    * Flags.Flag.ANSWERED 郵件回複標記,標識郵件是否已回複。    * Flags.Flag.DELETED 郵件刪除標記,標識郵件是否需要刪除。    * Flags.Flag.DRAFT 草稿郵件標記,標識郵件是否為草稿。    * Flags.Flag.FLAGGED 表示郵件是否為資源回收筒中的郵件。    * Flags.Flag.RECENT 新郵件標記,表示郵件是否為新郵件。    * Flags.Flag.SEEN 郵件閱讀標記,標識郵件是否已被閱讀。    * Flags.Flag.USER 底層系統是否支援使用者自訂標籤,唯讀。    */    Message messages[] = inbox.search(ft); //根據設定好的條件擷取message     //遍曆擷取的Message數組擷取資訊    for (Message message : messages) {        //預設返回Message類型對象,因為我需要擷取MessageID所以需要做強制        //轉換為IMAPMessage類型        IMAPMessage imes = (IMAPMessage)message;         //我需要擷取的郵件都是純文字的,所以在這簡單的做了判斷,不是純文字的直接跳過了。        //如果需要對不固定的郵件進行讀取需要使用message.getContentType()擷取郵件        //本文類型,然後根據類型進一步處理        //如果返回“text/plain”或”text/html”為純文字,如果為”multipart/*”則本文裡面可        //能還包含圖片等資訊        if (!(message.getContent() instanceof String))                    continue;        Map<String, String> map = new HashMap<String, String>();        map.put("content", (String)message.getContent());        map.put("title", message.getSubject());        //IMAPMessage類型對象可以擷取MessageID和UID,兩者是有區別的MessageID是        //郵件的唯一標識,不只限於當前郵件系統,UID是當前郵件系統的唯一標識,        //另外擷取MessageID需要讀取郵件,UID不需要讀取郵件所以速度更快。        map.put("messageId", imes.getMessageID());         mailInfoList.add(map); //儲存我要擷取的資訊map列表        mesList.add(message); //儲存我將要設定為已讀的message列表    }    //將剛才我擷取的郵件設定為已讀    if (mesList.size() > 0) {        Message[] savedMailMessage = new Message[mesList.size()];        mesList.toArray(savedMailMessage);        inbox.setFlags(savedMailMessage, new Flags(Flags.Flag.SEEN),true);    }} catch (NoSuchProviderException e) {    e.printStackTrace();} catch (MessagingException e) {    e.printStackTrace();} catch (IOException e) {    // TODO Auto-generated catch block    e.printStackTrace();} finally {    try {        if (inbox != null) {            inbox.close(false);            inbox = null;        }        if (store != null) {            store.close();            store = null;        }    } catch (MessagingException e) {        // TODO Auto-generated catch block        e.printStackTrace();    }}

All About JAVA javamail的pop3以及IMAP方式讀取未讀郵件等操作

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.