使用 IMAP 检测已删除的邮件
Detecting expunged messages with IMAP
所以 IMAP 有一个功能,一旦我查看了一个邮箱,我就可以通过向它询问我还没有看到的任何新 UID 来有效地查找任何新邮件。
但是我如何有效地找到 已删除 的消息?我还没有找到执行此操作的任何命令;我唯一的选择是检索邮箱的完整 UID 列表并查找丢失的。这不是最理想的。
我的邮箱有 25000 多封邮件。扫描其中一个邮箱需要数兆字节的流量才能执行 UID SEARCH 命令,所以我想避免这种情况。 IMAP 协议的深处隐藏着什么我遗漏的东西吗?
据我所知,唯一有效的答案是改变问题。
客户端无需了解 25000 条消息中的哪些已被删除,而是可以了解其缓存中的哪些消息已被删除以及哪些仍然存在,并且可以相当有效地完成。一种方法是在客户端中保留每个消息的标志,"this message has been observed to exist in this IMAP connection",当您访问未设置标志的缓存消息时,您发送 "x UID SEARCH UID y",这将 return如果消息存在则为消息的 UID,如果不存在则为空结果。 QRESYNC 的 SELECT
论点为这项技术提供了自然的改进。
当然,问题是使用非 QRESYNC 服务器时,客户端缓存消息的时间会超过必要的时间,并且根据您的实现方式,客户端可能会闪烁或出现不愉快的延迟。
好的,对于离线使用,这可以工作:
由于大邮箱通常会随着添加的邮件多而删除的邮件少而变大,因此您可以针对邮件的大部分未更改部分进行优化。如果您的客户端存储包含 10000 条消息,那么您可以发送“x UID SEARCH 2000,4000,6000,8000,10000”,这将在一个 SEARCH 响应中 return 五个 UID。根据更改的内容,您知道邮箱的每五分之一是否有任何删除,因此如果邮箱没有更改,您就可以非常便宜地进行验证。如果某个特定的五分之一发生了变化,您可以检索其中的所有 2000 个 UID。
QRESYNC/CONDSTORE 更好,而且还可以让您重新同步标志状态。
所以 IMAP 有一个功能,一旦我查看了一个邮箱,我就可以通过向它询问我还没有看到的任何新 UID 来有效地查找任何新邮件。
但是我如何有效地找到 已删除 的消息?我还没有找到执行此操作的任何命令;我唯一的选择是检索邮箱的完整 UID 列表并查找丢失的。这不是最理想的。
我的邮箱有 25000 多封邮件。扫描其中一个邮箱需要数兆字节的流量才能执行 UID SEARCH 命令,所以我想避免这种情况。 IMAP 协议的深处隐藏着什么我遗漏的东西吗?
据我所知,唯一有效的答案是改变问题。
客户端无需了解 25000 条消息中的哪些已被删除,而是可以了解其缓存中的哪些消息已被删除以及哪些仍然存在,并且可以相当有效地完成。一种方法是在客户端中保留每个消息的标志,"this message has been observed to exist in this IMAP connection",当您访问未设置标志的缓存消息时,您发送 "x UID SEARCH UID y",这将 return如果消息存在则为消息的 UID,如果不存在则为空结果。 QRESYNC 的 SELECT
论点为这项技术提供了自然的改进。
当然,问题是使用非 QRESYNC 服务器时,客户端缓存消息的时间会超过必要的时间,并且根据您的实现方式,客户端可能会闪烁或出现不愉快的延迟。
好的,对于离线使用,这可以工作:
由于大邮箱通常会随着添加的邮件多而删除的邮件少而变大,因此您可以针对邮件的大部分未更改部分进行优化。如果您的客户端存储包含 10000 条消息,那么您可以发送“x UID SEARCH 2000,4000,6000,8000,10000”,这将在一个 SEARCH 响应中 return 五个 UID。根据更改的内容,您知道邮箱的每五分之一是否有任何删除,因此如果邮箱没有更改,您就可以非常便宜地进行验证。如果某个特定的五分之一发生了变化,您可以检索其中的所有 2000 个 UID。
QRESYNC/CONDSTORE 更好,而且还可以让您重新同步标志状态。