最近在做邮件提醒抄送企业微信消息系统,就目前而言,无论是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 拉取收件箱邮件源码_邮件提醒系统:新邮件识别相关推荐

  1. JAVA毕业设计家庭食谱管理系统2021计算机源码+lw文档+系统+调试部署+数据库

    JAVA毕业设计家庭食谱管理系统2021计算机源码+lw文档+系统+调试部署+数据库 JAVA毕业设计家庭食谱管理系统2021计算机源码+lw文档+系统+调试部署+数据库 本源码技术栈: 项目架构:B ...

  2. JAVA毕业设计国产精品动漫网站计算机源码+lw文档+系统+调试部署+数据库

    JAVA毕业设计国产精品动漫网站计算机源码+lw文档+系统+调试部署+数据库 JAVA毕业设计国产精品动漫网站计算机源码+lw文档+系统+调试部署+数据库 本源码技术栈: 项目架构:B/S架构 开发语 ...

  3. JAVA毕业设计国漫论坛网站计算机源码+lw文档+系统+调试部署+数据库

    JAVA毕业设计国漫论坛网站计算机源码+lw文档+系统+调试部署+数据库 JAVA毕业设计国漫论坛网站计算机源码+lw文档+系统+调试部署+数据库 本源码技术栈: 项目架构:B/S架构 开发语言:Ja ...

  4. JAVA毕业设计公司CRM客户管理系统计算机源码+lw文档+系统+调试部署+数据库

    JAVA毕业设计公司CRM客户管理系统计算机源码+lw文档+系统+调试部署+数据库 JAVA毕业设计公司CRM客户管理系统计算机源码+lw文档+系统+调试部署+数据库 本源码技术栈: 项目架构:B/S ...

  5. JAVA毕业设计汇美食电子商城计算机源码+lw文档+系统+调试部署+数据库

    JAVA毕业设计汇美食电子商城计算机源码+lw文档+系统+调试部署+数据库 JAVA毕业设计汇美食电子商城计算机源码+lw文档+系统+调试部署+数据库 本源码技术栈: 项目架构:B/S架构 开发语言: ...

  6. JAVA毕业设计计算机office课程平台计算机源码+lw文档+系统+调试部署+数据库

    JAVA毕业设计计算机office课程平台计算机源码+lw文档+系统+调试部署+数据库 JAVA毕业设计计算机office课程平台计算机源码+lw文档+系统+调试部署+数据库 本源码技术栈: 项目架构 ...

  7. JAVA毕业设计web企业人事管理信息系统计算机源码+lw文档+系统+调试部署+数据库

    JAVA毕业设计web企业人事管理信息系统计算机源码+lw文档+系统+调试部署+数据库 JAVA毕业设计web企业人事管理信息系统计算机源码+lw文档+系统+调试部署+数据库 本源码技术栈: 项目架构 ...

  8. java计算机毕业设计无极服装出租管理系统源码+lw文档+系统+数据库

    java计算机毕业设计无极服装出租管理系统源码+lw文档+系统+数据库 java计算机毕业设计无极服装出租管理系统源码+lw文档+系统+数据库 本源码技术栈: 项目架构:B/S架构 开发语言:Java ...

  9. JAVA毕业设计HTML5运河古城网站计算机源码+lw文档+系统+调试部署+数据库

    JAVA毕业设计HTML5运河古城网站计算机源码+lw文档+系统+调试部署+数据库 JAVA毕业设计HTML5运河古城网站计算机源码+lw文档+系统+调试部署+数据库 本源码技术栈: 项目架构:B/S ...

最新文章

  1. OSG的HUD抬头文字显示
  2. matlab面向对象排序,matlab面向对象编程基础
  3. (SpringMVC)概述和简单使用
  4. excel appliacation 不能分配角色_用了5年Excel,换了这个神奇的报表工具,不禁感叹:国产真香...
  5. 关系数据库SQL之可编程性存储过程 1
  6. js中 new Date()使用说明
  7. HDU-2084(简单DP)
  8. MongoDB Databases
  9. 使用group by rollup和group by cube后的辅助函数
  10. 关于EIGRP路由汇总问题
  11. mysql监控工具_详解MySQL监控工具 mysql-monitor
  12. 标准Modbus通讯协议格式
  13. Android 12.0 修改系统默认字体的大小
  14. 请列举你所知道的Object类的方法并简要说明。
  15. 初步使用计算机教学设计,【教资笔试——科目三】信息技术教学设计范例
  16. 数学公式中一对双竖线
  17. 硬盘为raw格式后的修复
  18. 微信小程序连接蓝牙ble教程(目录)
  19. sfc/scannow是什么意思,有什么作用?(转)
  20. 樊登读书会终身成长读后感_(完整版)《终身成长》读后感

热门文章

  1. 9.带有返回值的函数
  2. Android “再按一次退出“
  3. CentOS6.0 yum php mcrypt 扩展安装问题
  4. Asp.net 编码函数
  5. Linux 查看进程的命令
  6. 9个提高代码运行效率的小技巧你知道几个?
  7. 开机自启动和由一个APK启动另一个APK核心代码
  8. xshell如何运行java_利用Xshell往应用服务器上部署项目
  9. 10 文件无效_新手必看!10个CAD常见问题解决技巧
  10. html兼容webki,评IE10对HTML5的完美支持