標籤: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方式讀取未讀郵件等操作