所以IMAP有一个功能,一旦我查看了邮箱,我就可以通过询问任何我尚未见过的新UID来有效地查找任何新邮件。
但我如何才能有效地找到 expunged 消息?我还没有找到任何执行此操作的命令;我唯一的选择是检索邮箱的完整UID列表并查找丢失的邮箱。这是相当不理想的。
我的邮箱有25000条以上的邮箱。扫描其中一个邮箱只需要几兆字节的流量来执行UID SEARCH命令,所以我想避免这种情况。我错过了IMAP协议深处的任何内容吗?
答案 0 :(得分:2)
我所知道的唯一有效的答案是改变问题。
客户端可以了解哪些消息已被删除,哪些消息仍然存在,而不是学习25000条消息中的哪一条被删除,而且可以相当有效地完成。一种方法是在客户端保留每个消息标志,“此消息已被观察到存在于此IMAP连接中”,并且当您访问未设置标志的缓存消息时,您将发送“x UID SEARCH UID” y“,如果消息存在则返回消息的UID,否则返回空的结果。 QRESYNC的SELECT
参数为这种技术提供了自然的改进。
问题当然是,对于非QRESYNC服务器,客户端会将消息缓存超过必要的时间,并且根据您实现它的方式,客户端可能会闪烁或出现令人不快的延迟。
答案 1 :(得分:1)
好的,对于离线使用,这可以起作用:
由于大邮箱通常会通过添加许多邮件而很少删除,因此您可以针对邮件中存在大量未更改的部分进行优化。如果您的客户端商店包含10000条消息,那么您可以发送' x UID SEARCH 2000,4000,6000,8000,10000`,它将在一个SEARCH响应中返回五个UID。根据哪些更改,您知道邮箱的每五分之一是否有任何清除,因此如果邮箱没有更改,您已经非常便宜地验证了。如果特定的五分之一已更改,则可以检索其中的所有2000个UID。
QRESYNC / CONDSTORE虽然更好,但也让你重新同步旗帜状态。