我正在开发一个邮件客户端应用程序,该应用程序使用IMAP c-client库同步GMail帐户的电子邮件。
如何在不盲目搜索所有未读电子邮件的情况下,在邮箱中获取最近看不见/未读过的电子邮件?
邮件搜索需要在每次同步时将所有未读电子邮件提取到客户端,但在每次同步时执行都是非常昂贵的操作。 是否有更好的方法可以向客户端传达任何未读的电子邮件,这些电子邮件在之前与服务器的交互中未同步?
例如,Thunderbird能够通过某种机制同步看不见的电子邮件(可能通过盲目搜索所有看不见的电子邮件),因为IDLE命令不会通知 关于他们的客户。是否有某种机制可以告诉客户自上次同步后出现的未读电子邮件?
答案 0 :(得分:0)
快速标记更改重新同步(RFC-4551)有一个IMAP扩展。使用此扩展,可以搜索自上次同步以来已更改的所有消息(基于某种时间戳)。但是,此扩展程序并未得到广泛支持 - 特别是不受gmail的IMAP服务器支持:
* CAPABILITY IMAP4rev1 UNSELECT IDLE NAMESPACE QUOTA ID XLIST CHILDREN X-GM-EXT-1 UIDPLUS COMPRESS=DEFLATE
有一个信息RFC描述了IMAP客户端应如何进行同步(RFC-4549,第4.3节)。该文本建议发出以下两个命令:
tag1 UID FETCH <lastseenuid+1>:* <descriptors>
tag2 UID FETCH 1:<lastseenuid> FLAGS
第一个命令用于获取所有未知邮件所需的信息(不知道有多少邮件)。第二个命令用于同步已经看过的邮件的标志。
这种方法被广泛使用。因此,许多IMAP服务器都包含优化,以便快速提供此信息。通常,网络带宽是限制因素。
如果您只对UNSEEN标志感兴趣,可能是您可以做的最佳UID搜索。