关于已删除消息/设置标志更新IMAP客户端的最佳实践



我理解如何通过UID和UidValidity的概念有效地从IMAP服务器获取电子邮件,即在IMAP客户端中保存上次获取的UID,然后只获取比上次获取的UID高的UID,只要邮箱的UidValidity参数保持不变。(如果UidValidity更改,则重新获取整个邮箱)

无论如何,对于IMAP客户端来说,实现消息已在服务器上的邮箱中被删除或标记(例如来自另一个客户端)的最佳实践是什么?我发现了这个问题:IMAP客户端同步本地消息服务器?但我还是不知道那是什么意思?是否应该在每次IMAP客户机连接到IMAP服务器时再次获取所有uid ?IMAP协议是否如所选答案所建议的那样支持散列表?

不幸的是,检测已删除的消息是原始IMAP协议真正不足的地方之一。

检测标记为Deleted的消息非常容易。您可以执行UID SEARCH DELETED,它将为您提供所有已删除消息的UID。假设您不会保留太多Deleted消息并且邮箱不是太大,这是一个相当有效的查询。

检测已经消失的消息有点困难。如果没有QRESYNC扩展(很少实现),最简单的方法就是向服务器询问仍然存在UID SEARCH ALL的所有消息的uid,并将此列表与您所知道的消息列表进行比较。答案是,在局部,你可能想要使用一些智能的数据结构来做到这一点。例如,在Python中,您可以使用set。您拥有的消息集减去服务器的消息集,剩下的消息集已从服务器中删除。服务器拥有的消息集减去您拥有的消息集,将为您留下一组新消息。

如果服务器上只有少量消息(<1000)这也是一个相当有效的查询。但是,如果服务器有成千上万条消息,这有时可能需要很长时间。IMAP不能很好地扩展。

相关内容

最新更新