使用IMAP获取邮件,如何获取已删除的邮件?

4
我有一个邮件帐户,里面有5000封邮件,旧的邮件已经4年了。 我使用网页界面和Thunderbird登录该帐户。 我在网页界面中删除了一封非常旧的邮件。然后我在没有重新登录的情况下在Thunderbird上按下刷新(获取邮件)。 Thunderbird立即删除了该邮件。它是如何如此快速地检测到已删除的邮件的呢? 我必须在Java(Java Mail API)中实现这种机制,我认为我必须获取所有邮件,并将已获取的邮件存储在本地,然后逐个进行比较。 据我所知,消息ID属性不安全,因此当我将一条消息移动到另一个位置时,它可能会被更改,它们不是安全的。最好的方法是使用存储在标题中的消息ID或使用自定义缓存机制,如Mailing with IMAP: How to detect that a message has been moved from one folder to another?所述。
作为结果,我们如何能够快速了解已删除或移动的消息?Thunderbird如何检测新邮件?它是否存储上一条已存储的消息ID?但是对于已删除的旧消息或移动的消息,唯一的选择是将所有文件夹与本地存储进行比较,我错了吗?
我的想法是,我将检查Thunderbird的调试模式,并查看底层发生了什么。

1
它将比较服务器上可用的UID和本地UID,并删除不再存在的UID,以及隐藏带有\Deleted标志的UID。 - Max
1个回答

1
当邮件被删除时,服务器会发送一个 EXISTS 响应,之后客户端可以执行 FETCHUID FETCH 操作来确定哪些邮件已被删除,通过比较客户端已有的邮件的 UID 值和服务器上的邮件的 UID 值。参见 https://www.rfc-editor.org/rfc/rfc3501#section-7.3.1

2
实际上,如果您对文件夹的服务器有一个开放的连接,服务器应该发送一个未经请求的FETCH响应,指示已设置\Deleted标志,然后是EXPUNGE响应,指示消息确实已删除。 您可以使用MessageChangedListenerMessageCountListener来监听这些事件。 如果您处于离线状态,可以使用UID在联机时重新同步您的视图。 - Bill Shannon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接