日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

java 拉取收件箱邮件源码_邮件提醒系统:新邮件识别

發布時間:2024/7/5 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java 拉取收件箱邮件源码_邮件提醒系统:新邮件识别 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

最近在做郵件提醒抄送企業微信消息系統,就目前而言,無論是pop3還是imap都沒有一個好的方法只接收新郵件,基本只能依靠收件箱列表message自行判斷,下面給出幾種思路并作對比。

//收件箱 folder = store.getFolder("INBOX"); //權限 folder.open(Folder.READ_ONLY);

1 緩存(redis)計數方案

這是最為直觀的一種方式,基本思想是,在redis中對處理過新郵件的數目作原子加標記cacheTotal,定時掃描收件箱中所有郵件數目total, total與cacheTotal的差值即為新郵件數目,當然也很容易獲取到新郵件的數組下標。

  • 優點:直觀,簡單
  • 缺點:粗暴,可能因為郵件歸檔,redis異常等原因,造成誤讀,風險較大

2 采用flag判斷是否是新郵件

flag是郵件對象message的一種標識,需要設置:

  • 需要使用imap協議,Store store = session.getStore("imap");
  • 設置folder需要讀寫權限, folder.open(Folder.READ_WRITE);

但獲取flag注意一點:在第一行,如果你調用了getMessages(),在第二次運行程序時就不會出現新郵件!因為調用了getMessages(),它就把新郵件讀成了舊郵件。 運行結果:第一次運行,輸出的flag:javax.mail.Flags@10,再次運行就全是0了。

  • 優點:flag在能獲取有效值的情況下,可精確判定是新郵件唯一標識
  • 缺點:(1)限定是imap協議,pop3不可行(2)flag不能穩定獲取,對于需要分批次拉取新郵件的需求不能滿足

3 采用【郵箱名+UID】方式接收新郵件

UID是賬戶的每一封郵件的標識,不同于MessageID,MessageID是發送郵件的時候生成的唯一ID,也有可能發送沒有你的接收郵箱自己生成,或者是javamail生成的,取messageid需要下載郵件的頭造成效率緩慢,所以只需要存儲uid;以POP3為例:

UID唯一性的前提是在同一個賬戶里,也就是說在不同賬戶下UID還是可能又相同的,這在數據庫持久化時得注意,故采用【郵箱名+UID】得方式存儲。還有就是session如果不帶有用戶和服務器信息, 就這樣生成一個公用的就可以了 :

  • 優點:(1)能精準識別新郵件(2)pop3,imap均可支持
  • 缺點:(1)還行吧

總結

以上是生活随笔為你收集整理的java 拉取收件箱邮件源码_邮件提醒系统:新邮件识别的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。