IMAP:(JavaMail)UIDVALIDTY 值总是更改某些文件夹
Posted
技术标签:
【中文标题】IMAP:(JavaMail)UIDVALIDTY 值总是更改某些文件夹【英文标题】:IMAP: (JavaMail) UIDVALIDTY values always changes of some folders 【发布时间】:2017-08-30 15:23:14 【问题描述】:我们使用 JavaMail api 实现了一个邮件客户端,它连接到邮件服务器以处理 IMAP 协议中的消息。该实现在许多客户和邮件服务器上都可以正常工作,但是我们遇到了一个客户问题,
UIDVALIDTY:为了确定我们是否可以依赖文件夹中邮件的 UID 值,我们存储每个文件夹最近的 UIDVALIDTY。在下一个过程中,我们将最近存储的值与当前值进行比较。如果它们相同,我们可以依赖 UID。 IMAP 规范要求服务器尽最大努力避免对该值进行不必要的更改。 (邮件服务器崩溃、重启、升级等除外)
在这个特定的客户邮件服务器上,某些文件夹的 UIDVALIDTY 值每次都会改变。测试帐户有 300 个文件夹,其中 15 个总是相同的特定定义文件夹,总是具有不同的 UIDVALIDTY 值。
这可能是什么原因?有邮件服务器设置吗?我认为它超出了java mail api的范围,它与邮件服务器有关。客户说我们的邮件服务器没有问题,我们可以将它与我们的 Web 界面一起使用。我如何说服并说服客户他们的邮件服务器存在问题?
【问题讨论】:
【参考方案1】:一些邮箱格式没有空间来存储 UID,我认为一些仍在使用的服务器支持这种格式。 Dovecot 尤其支持多种存储格式,IIRC 包括不支持 UID 的一种。
如果服务器必须这样做,它会 send you a UIDNOTSTICKY response code when you open the mailbox 并且从那时起它会凭空变出新的 UIDS。您可能会检测到 UIDNOTSTICKY 并拒绝播放,或者只是将其视为测试您的有效性更改处理的机会。
【讨论】:
我们可以使用 java mail api 检测 UIDNOTSTICKY 吗? 似乎如此。我不确定,但您似乎很可能会收到 you can listen for 的 StoreEvent。如果由于缺乏人类可读的文本而被抑制,您总是可以继承 IMAPStore,重新实现handleResponseCode()
,检查 UIDNOTSTICKY 并调用 super.handleResponseCode()
。但是监听 StoreEvent 更好。
您可以启用JavaMail debug output 以查看您是否收到该响应代码,但即使您不清楚您是否可以做任何不同的事情。您要么必须假设每次看到邮箱都不同,要么必须发明自己的启发式方法来尝试确定任何缓存信息是否仍然有效。我认为这些邮箱实际上并没有在您每次看到它们时都被删除和重新创建,对吧?客户使用的是哪种邮件服务器?
抱歉回复晚了。是的,这些盒子实际上并没有被删除或重新创建。我们有 300 多个文件夹,其中只有 15 个经常更改其 UIDVALIDTY,但消息保持不变。他们正在使用 Groupwise。以上是关于IMAP:(JavaMail)UIDVALIDTY 值总是更改某些文件夹的主要内容,如果未能解决你的问题,请参考以下文章
SSL上的JavaMail IMAP非常慢 - 批量获取多条消息
可以使用 JavaMail 和 Apache Camel Mail (IMAP) 通过服务帐户连接 Microsoft Exchange 共享邮箱吗?