1. 程式人生 > >JavaMail系列(五) 使用IMAP協議接收並解析電子郵件

JavaMail系列(五) 使用IMAP協議接收並解析電子郵件

package org.yangxin.study.jm; 
 
import java.io.BufferedReader; 
import java.io.InputStreamReader; 
import java.util.Properties; 
 
import javax.mail.Flags.Flag; 
import javax.mail.Folder; 
import javax.mail.Message; 
import javax.mail.Session; 
import javax.mail.Store; 
import javax.mail.internet.MimeUtility; 
 
import com.sun.mail.imap.IMAPMessage; 
 
/**
 * <b>使用IMAP協議接收郵件</b><br/>
 * <p>POP3和IMAP協議的區別:</p>
 * <b>POP3</b>協議允許電子郵件客戶端下載伺服器上的郵件,但是在客戶端的操作(如移動郵件、標記已讀等),不會反饋到伺服器上,<br/>
 * 比如通過客戶端收取了郵箱中的3封郵件並移動到其它資料夾,郵箱伺服器上的這些郵件是沒有同時被移動的。<br/>
 * <p><b>IMAP</b>協議提供webmail與電子郵件客戶端之間的雙向通訊,客戶端的操作都會同步反應到伺服器上,對郵件進行的操作,服務
 * 上的郵件也會做相應的動作。比如在客戶端收取了郵箱中的3封郵件,並將其中一封標記為已讀,將另外兩封標記為刪除,這些操作會
 * 即時反饋到伺服器上。</p>
 * <p>兩種協議相比,IMAP 整體上為使用者帶來更為便捷和可靠的體驗。POP3更易丟失郵件或多次下載相同的郵件,但IMAP通過郵件客戶端
 * 與webmail之間的雙向同步功能很好地避免了這些問題。</p>
 */ 
public class IMAPReceiveMailTest { 
 
    public static void main(String[] args) throws Exception { 
        // 準備連線伺服器的會話資訊 
        Properties props = new Properties(); 
        props.setProperty("mail.store.protocol", "imap"); 
        props.setProperty("mail.imap.host", "imap.163.com"); 
        props.setProperty("mail.imap.port", "143"); 
         
        // 建立Session例項物件 
        Session session = Session.getInstance(props); 
         
        // 建立IMAP協議的Store物件 
        Store store = session.getStore("imap"); 
         
        // 連線郵件伺服器 
        store.connect("

[email protected]", "123456abc"); 
         
        // 獲得收件箱 
        Folder folder = store.getFolder("INBOX"); 
        // 以讀寫模式開啟收件箱 
        folder.open(Folder.READ_WRITE); 
         
        // 獲得收件箱的郵件列表 
        Message[] messages = folder.getMessages(); 
         
        // 列印不同狀態的郵件數量 
        System.out.println("收件箱中共" + messages.length + "封郵件!"); 
        System.out.println("收件箱中共" + folder.getUnreadMessageCount() + "封未讀郵件!"); 
        System.out.println("收件箱中共" + folder.getNewMessageCount() + "封新郵件!"); 
        System.out.println("收件箱中共" + folder.getDeletedMessageCount() + "封已刪除郵件!"); 
         
        System.out.println("------------------------開始解析郵件----------------------------------"); 
         
        // 解析郵件 
        for (Message message : messages) { 
            IMAPMessage msg = (IMAPMessage) message; 
            String subject = MimeUtility.decodeText(msg.getSubject()); 
            System.out.println("[" + subject + "]未讀,是否需要閱讀此郵件(yes/no)?"); 
            BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); 
            String answer = reader.readLine();   
www.2cto.com

            if ("yes".equalsIgnoreCase(answer)) { 
                POP3ReceiveMailTest.parseMessage(msg);  // 解析郵件 
                // 第二個引數如果設定為true,則將修改反饋給伺服器。false則不反饋給伺服器 
                msg.setFlag(Flag.SEEN, true);   //設定已讀標誌 
            } 
        } 
         
        // 關閉資源 
        folder.close(false); 
        store.close(); 
    } 

測試結果:

 

原文連結:http://www.2cto.com/kf/201206/136654.html

相關推薦

JavaMail系列() 使用IMAP協議接收解析電子郵件

package org.yangxin.study.jm;  import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.Properties;  import javax

JavaMail系列(四) 使用POP3協議接收解析電子郵件

package org.yangxin.study.jm;  import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.i

javaMail使用imap協議接收郵件

在這裡說明一下,pop3和imap協議都是接收郵件的,但是他們還是有很多不同的。 IMAP和POP有什麼區別? POP允許電子郵件客戶端下載伺服器上的郵件,但是您在電子郵件客戶端的操作(如:移動郵件、標記已讀等),這是不會反饋到伺服器上的,比如:您通過電子郵

android串列埠通訊接受自定義協議資料解析問題

1.一般自定義的串列埠協議  串列埠傳輸介面底層是按位(bit)傳送的,上層是按byte傳送和接收的,但協議為了方便描述,每個byte用十六進位制數(0x00~0xFF)表示,範相當於十進位制的0~255,而byte為八位且是有符號型別,相當於十進位制的-128~127,明

PHP接收解析微信支付結果通知

支付完成後,微信會把相關支付結果和使用者資訊傳送給商戶,商戶需要接收處理,並返回應答。微信通知資訊為xml格式。 資訊格式大致如下: <xml><appid><![CDATA[wx65498522b9a7pokr]]></appid

[原始碼和報告分享] C#實現的基於SMTP協議的E-MAIL電子郵件傳送客戶端軟體

利用SMTP和Pop協議從底層開發了這個軟體。SMTP全稱是簡單郵件傳輸協議,它專門用來發送郵件用的。Pop全稱是郵局協議,是專門用於接收郵件的。我主要是負責如何實現傳送郵件功能的。MailSend名稱空間是我整個程式的核心。它包括兩個類。在SmtpMail的類中包含了一個SendMail的方法,它

代碼收藏系列--php--加載sql文件解析成數組

存儲過程 exist eat ati body his ble class 註釋 php加載sql文件,解析成以分號分割的數組。(支持存儲過程和函數提取,自動過濾註釋) /** * 加載sql文件為分號分割的數組 * <br />支持存儲過程和函數提取

SpringMVC 接收頁面Post提交的json字串解析

son 使用的是ali的fastjson; 頁面提交的是json字串,後臺使用@RequestBody String param接收資料,通過json解析param;   頁面: <%@ page language="java" contentType="text/h

的人學iOS:swift獲取網頁解析需要的內容(1)

前言 為了能夠寫出有價值的應用,除了遊戲,即便是遊戲也需要網路支援才能讓使用者產生粘性,遊戲中比較獲取的等級、積分等如果只儲存在手機上,則無法與其他好友進行比較和互動,讓我們的應用(或遊戲)的互動性大打折扣。如果應用的內容完全由自己來產生,則需要開發服務端、介

微信第三方平臺開發經驗總結():接收授權方授權請求儲存授權方資訊

public String queryAuth(String authCode,String expiresIn) {     String componentAccessToken = getComponentAccessToken();//把之前儲存的component_access_token取出來

JAVA後臺接收前臺傳過來的json字串解析獲得key 和value

前臺程式碼: $.ajax({ type:"post", url:"project/updateProject", data:{ formda

如何在WebService接收一個XML檔案解析,客戶端如何傳送這個XML檔案?急求簡單程式碼示例。。

客戶端 xmlHttp = null; if (window.XMLHttpRequest) { // If IE7, Mozilla, Safari, and so on: Use native object. xmlHtt

關於java 傳送http json資料格式請求時,伺服器端如何接收json資料解析

一般情況下,傳送http請求時content-tye是application/x-www-form-urlencoded格式,而這樣的格式會以鍵值對的形似被封裝,至於是在瀏覽器傳送的時候被封裝的還是在伺服器端被封裝的我還不太清楚。但是我的猜測是在瀏覽器傳送請求的時候在客戶端

linux實戰()----壓縮備份檔案刪除原檔案----例項解析

我們在日常的監控中要考慮到磁碟空間的問題,經常會把日誌檔案壓縮備份並刪除原檔案。 我們在基礎(八)中已經學習了壓縮檔案的命令,我們需要做的是把壓縮命令與指令碼結合起來。 這裡以實戰(四)中寫

Node.JS入門()——後臺接收頁面引數儲存到資料庫

前言 在學習了nodejs和資料庫mysql互動的情況下,我們來學習一下如何從頁面上獲取引數然後存放到資料庫中,這種方式通常有兩種,一種是get方式,一種是post方式 內容 背景 本篇的主要場景是獲取註冊中的使用者名稱和密碼,然後儲存到資

Java接收Cordys中webservice介面的返回資料解析xml獲取相應節點資料

在做專案的過程中,需要用Java呼叫Cordys的webservice介面的返回資料,眾所周知,webservice返回的資料是xml形式的,那麼我們怎樣獲取相關節點下的資料呢? 處理之前返回的資料格式如下: <soap:Envelope xmln

RTSP客戶端接收H264的RTP包解析遇到的問題

關於RTSP怎麼握手,RTP包和H264的格式網上已經很多了,我就不贅述了。只說一下在做這個客戶端的時候遇到的問題。說明下,我的客戶端程式碼是從ffmpeg裡面提取出來的。 1、傳送PLAY命令後,服務端抓包顯示已經在發資料了,但是客戶端似乎沒收到資料。  經過仔細檢查後

javamail使用IMAP協議收取gmail郵件

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

微信小程式請求SOAP協議格式的資料解析Dom節點

問題 這實際上是三個問題: 微信小程式請求獲取 SOAP 協議格式的資料 將獲取到的 xml 解析成可用的字串 將字元轉轉化為 json 物件供介面使用 背景 看看後臺這扎心的資料,作為2010後的程式設計師,給你這樣的介面,你第一眼是不是也是一臉

協議及tcp三次握手四次揮手

p地址 電平 揮手 syn 服務端 局域網 dhcp 網絡層 數據 一.五層協議:物理層:傳送數據 通過高低電平傳輸數據數據鏈路層:ethernet 以太網協議 必須有一塊網卡:12位16進制數,前六位位廠商編號,後六位為流水線號 (定位到某一臺機