1. 程式人生 > >JavaMail通過IMAP和POP3接收未讀以及設定已讀郵件

JavaMail通過IMAP和POP3接收未讀以及設定已讀郵件


javamailpop3imap
使用javaMail收郵件主要有兩種協議,一種是pop3,一種是imap。這兩種協議都可以用來收郵件,但是在其中的處理上是有區別的。pop3是不支援判斷郵件是否為已讀的,也就是說你不能直接從收件箱裡面取到未讀郵件,這需要自己進行判斷,然而imap就提供了這樣的功能,使用imap時可以很輕鬆的判斷該郵件是否為已讀或未讀或其他。

此外收件箱中的每一封郵件都對應著一個MessageNumber,所以可以通過一個MessageNumber拿到對應的那封郵件。如:Message message = folder.getMessage(messageNumber);

pop3和imap主要區別就是能否判斷郵件狀態的問題,其他的操作都差不多.

pop3收郵件和解析郵件:
Java程式碼  收藏程式碼

    package com.clxx.test;    
        
    import java.io.FileOutputStream;    
    import java.io.IOException;    
    import java.io.InputStream;    
    import java.io.OutputStream;    
    import java.util.Enumeration;    
    import java.util.Properties;    
        
    import javax.mail.BodyPart;    
    import javax.mail.Folder;    
    import javax.mail.Message;    
    import javax.mail.MessagingException;    
    import javax.mail.Multipart;    
    import javax.mail.Session;    
    import javax.mail.Store;    
    import javax.mail.internet.MimeMultipart;    
        
    public class Email2 {    
        
        public static void main(String args[]) throws MessagingException,    
                IOException {    
            Properties props = new Properties();    
            props.setProperty("mail.store.protocol", "pop3");    
            props.setProperty("mail.pop3.host", "pop3.sohu.com");    
            Session session = Session.getDefaultInstance(props);    
            Store store = session.getStore("pop3");    
            store.connect("
[email protected]
", "password"); Folder folder = store.getFolder("INBOX"); folder.open(Folder.READ_WRITE); // 全部郵件數 int messageCount = folder.getMessageCount(); System.out.println(messageCount); Message[] messages = folder.getMessages(); for (int i = 0; i < messages.length; i++) { Message message = messages[i]; System.out.println(message.getSubject()); // 刪除郵件 // message.setFlag(Flags.Flag.DELETED, true); // 標記為已讀 // message.setFlag(Flags.Flag.SEEN, true); //pop3沒有判斷郵件是否為已讀的功能,要使用Imap才可以 /*Flags flags = message.getFlags(); if (flags.contains(Flags.Flag.SEEN)) System.out.println("這是一封已讀郵件"); else { System.out.println("未讀郵件"); message.setFlag(Flags.Flag.SEEN, true); }*/ System.out.println("傳送時間:" + message.getSentDate()); System.out.println("主題:" + message.getSubject()); System.out.println("內容:" + message.getContent()); //獲取所有的Header,頭資訊 Enumeration headers = message.getAllHeaders(); System.out.println("----------------------allHeaders-----------------------------"); /* while (headers.hasMoreElements()) { Header header = (Header)headers.nextElement(); System.out.println(header.getName()+" ======= "+header.getValue()); }*/ //解析郵件內容 Object content = message.getContent(); if (content instanceof MimeMultipart) { MimeMultipart multipart = (MimeMultipart) content; parseMultipart(multipart); } System.out .println("========================================================"); System.out .println("========================================================"); } folder.close(true); store.close(); } /** * 對複雜郵件的解析 * @param multipart * @throws MessagingException * @throws IOException */ public static void parseMultipart(Multipart multipart) throws MessagingException, IOException { int count = multipart.getCount(); System.out.println("couont = "+count); for (int idx=0;idx<count;idx++) { BodyPart bodyPart = multipart.getBodyPart(idx); System.out.println(bodyPart.getContentType()); if (bodyPart.isMimeType("text/plain")) { System.out.println("plain................."+bodyPart.getContent()); } else if(bodyPart.isMimeType("text/html")) { System.out.println("html..................."+bodyPart.getContent()); } else if(bodyPart.isMimeType("multipart/*")) { Multipart mpart = (Multipart)bodyPart.getContent(); parseMultipart(mpart); } else if (bodyPart.isMimeType("application/octet-stream")) { String disposition = bodyPart.getDisposition(); System.out.println(disposition); if (disposition.equalsIgnoreCase(BodyPart.ATTACHMENT)) { String fileName = bodyPart.getFileName(); InputStream is = bodyPart.getInputStream(); copy(is, new FileOutputStream("D:\\"+fileName)); } } } } /** * 檔案拷貝,在使用者進行附件下載的時候,可以把附件的InputStream傳給使用者進行下載 * @param is * @param os * @throws IOException */ public static void copy(InputStream is, OutputStream os) throws IOException { byte[] bytes = new byte[1024]; int len = 0; while ((len=is.read(bytes)) != -1 ) { os.write(bytes, 0, len); } if (os != null) os.close(); if (is != null) is.close(); } } 使用imap協議接收郵件: Java程式碼 收藏程式碼 package com.clxx.test; import java.util.Properties; import javax.mail.Flags; import javax.mail.Folder; import javax.mail.Message; import javax.mail.Session; import com.sun.mail.imap.IMAPFolder; import com.sun.mail.imap.IMAPStore; /** * 使用imap協議獲取未讀郵件數 * * @author w * */ public class Email3 { public static void main(String[] args) throws Exception { String user = "
[email protected]
";// 郵箱的使用者名稱 String password = "password"; // 郵箱的密碼 Properties prop = System.getProperties(); prop.put("mail.store.protocol", "imap"); prop.put("mail.imap.host", "imap.sohu.com"); Session session = Session.getInstance(prop); int total = 0; IMAPStore store = (IMAPStore) session.getStore("imap"); // 使用imap會話機制,連線伺服器 store.connect(user, password); IMAPFolder folder = (IMAPFolder) store.getFolder("INBOX"); // 收件箱 folder.open(Folder.READ_WRITE); // 獲取總郵件數 total = folder.getMessageCount(); System.out.println("-----------------共有郵件:" + total + " 封--------------"); // 得到收件箱資料夾資訊,獲取郵件列表 System.out.println("未讀郵件數:" + folder.getUnreadMessageCount()); Message[] messages = folder.getMessages(); int messageNumber = 0; for (Message message : messages) { System.out.println("傳送時間:" + message.getSentDate()); System.out.println("主題:" + message.getSubject()); System.out.println("內容:" + message.getContent()); Flags flags = message.getFlags(); if (flags.contains(Flags.Flag.SEEN)) System.out.println("這是一封已讀郵件"); else { System.out.println("未讀郵件"); } System.out .println("========================================================"); System.out .println("========================================================"); //每封郵件都有一個MessageNumber,可以通過郵件的MessageNumber在收件箱裡面取得該郵件 messageNumber = message.getMessageNumber(); } Message message = folder.getMessage(messageNumber); System.out.println(message.getContent()+message.getContentType()); // 釋放資源 if (folder != null) folder.close(true); if (store != null) store.close(); } }


相關推薦

JavaMail通過IMAPPOP3接收以及設定郵件

javamailpop3imap 使用javaMail收郵件主要有兩種協議,一種是pop3,一種是imap。這兩種協議都可以用來收郵件,但是在其中的處理上是有區別的。pop3是不支援判斷郵件是否為已讀的,也就是說你不能直接從收件箱裡面取到未讀郵件,這需要自己進行判斷,然而

IMAPPOP3有什麼區別?

POP3協議允許電子郵件客戶端下載伺服器上的郵件,但是在客戶端的操作(如移動郵件、標記已讀等),不會反饋到伺服器上,比如通過客戶端收取了郵箱中的3封郵件並移動到其他資料夾,郵箱伺服器上的這些郵件是沒有同時被移動的 。 而IMAP提供webmail 與電子郵件客戶端之間的雙向

MAC同時通過有線無線訪問內外網的設定方法

需求: 使用無線訪問外網。 使用網線訪問內網。 解決方法: 1.在網路設定中,調整網路順序。 wifi第一,有線第二。 2.進入控制檯,刪除預設路由。 route -n delete 0.0.0.

通過 JavaMail 訪問 Hotmail 郵箱(hotmail不提供smtppop3服務)

簡介: 相信許多人都有 MSN 聊天工具的帳號,例如 [email protected] ,這個賬號其實也是一個郵件地址,可以進行正常的郵件收發功能,你可以通過網址 http://www.hotmail.com 來訪問和操作這個郵箱進行郵件的收發。但是這個郵箱有一

JavaMail IMAP JavaMail Pop3 簡介以及使用過程遇到的問題總結

簡介:我們都知道,當我們自己做郵件軟體連結網上其他郵件商都有兩種連結方式; pop3和imap協議都是接收郵件的,但是他們還是有很多不同的。 一、pop3和imap協議的不同 1)pop3允許電子郵件

第9章 應用層(6)_SMTPPOP3/IMAP協議

7. 電子郵件 7.1 電子郵件傳送和接收過程 (1)圖解電子郵件的傳送   ①一個電子郵件系統應具備三個主要組成構件:A使用者代理(如Outlook)、B郵件伺服器、C郵件傳送和接收協議(分別為SMTP和POP3協議)(POP3是郵局協議,Post Office Protocol

郵件傳輸協議 SMTP 、POP3IMAP Exchange 比較及聯絡?

常見的郵件傳輸協議有SMTP,POP3,  IMAP, Exchange ,這些進行簡單的比較學習: 1、exchange 是微軟公司出的一套電子郵件處理元件,有存取,轉發,儲存,語音,協同過濾等功能 2、smtp 是簡單郵件傳輸協議,主要是發郵件。編寫好郵件資訊後,點

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允許電子郵件客戶端下載伺服器上的郵件,但是您在電子郵件客戶端的操作(如:移動郵件、標記已讀等),這是不會反饋到伺服器上的,比如:您通過電子郵

.NET 通過 Autofac DynamicProxy 實現AOP

調用方法 console mage 技術分享 攔截器 抽象 select 攔截 bsp   什麽是AOP?引用百度百科:AOP為Aspect Oriented Programming的縮寫,意為:面向切面編程,通過預編譯方式和運行期動態代理實現程序功能的統一維護的一種技術。

Bitmap通過getWidthgetHeight獲取尺寸不符

pac coder sdn activit eight -s 設備 資源 factor 在使用BitmapFactory載入圖片時,常會出現這樣的情況,返回的圖片尺寸與實際尺寸不符。這是因為我們把圖片資源放到res/drawable文件路徑下時,選擇的文件不同所致。不同

把編譯安裝的httpd 實現服務腳本,通過servicechkconfig 進行管理

成功 服務腳本 文件內容 roc grep sharp list roo httpd 把編譯安裝的httpd 實現服務腳本,通過service和chkconfig 進行管理 1 編譯安裝httpd 把httpd編譯安裝在/app/httpd/目錄下。 2 在/e

MSF魔鬼訓練營-3.1.1信息收集-通過DNSIP地址挖掘目標網絡信息

詳細 root https earch 滲透測試 出發 .com 域名查詢 測試 情報搜集環境站滲透測試全過程的80%~90% 一、外圍信息搜集(公開渠道信息搜集OSINT open source intelligence) 3.1.1信息收集-通過DNS和IP地址挖

zabbix企業應用:通過SNMPiDRAC監控DELL服務器硬件

創建 idv epo pla dev 責任 state cti update 原創作品,允許轉載,轉載時請務必以超鏈接形式標明文章 原始出處 、作者信息和本聲明。否則將追究法律責任。http://qicheng0211.blog.51cto.com/3958621/1749

Gmail,QMail,163郵箱的 IMAP/SMTP/POP3 地址

name 關於 發送郵件 客戶端 方便 ble mtp 常用 blog 我們在客戶端設置郵箱或者使用 PHPMailer 發送郵件的時候,我們都會去查找這些郵箱的 IMAP/SMTP/POP3 地址,這裏就列出 Gmail, QMail, 163郵箱這三個常用郵箱的這些地址

PHP獲得微信用戶的OpenID,然後再通過OpenIDaccess_token查詢用戶信息

csdn lac 輸出 這一 獲取 nsf ppi content 進行 PHP獲得微信用戶的OpenID,然後再通過OpenID和access_token查詢用戶信息大致如下步驟: 前提是必須要知道的有公眾帳號的:appid和secret * 1、拼成一個鏈接 * 2、

STL heapfirst_queue(完結)

相關 都是 pri ycm 不知道 markdown 實現 tail 通過 STL heap和first_queue

InputStream中通過markreset方法重復利用緩存

輸出 string sys 都是 實現 源碼 常用 ges 不支持 通過緩存InputStream可重復利用一個InputStream,但是要緩存一整個InputStream內存壓力可能是比較大的。如果第一次讀取InputStream是用來判斷文件流類型,文件編碼等

cocos creator學習01 關於cocos creator 通過get post連接node.js服務器的初步探索

erl dao save ready ... img manual file ole 一、node.js的安裝註意事項    1.參考http://www.runoob.com/nodejs/nodejs-install-setup.html    2.node.js如果不

通過投射ABC模式的綜合體發現真實的想法

投射 ABC模型 定靜 我們從小被灌輸了很多要求、標準和觀念,相反的一面都被我們壓抑在潛意識中。但世界是二元對立的,有聰明就有愚蠢,有勇敢就有怯懦。當我們看到帶有被我們否定特質的人,我們會特別不耐煩,因為他們提醒了我們不願意面對的一面,這就是投射,也是一種逃避策略。所以說:外面,沒有別人,一切都是