除了邮件搜索技术之外,如何在邮箱中获取看不见/未读的电子邮件

时间:2012-03-27 17:44:17

标签: c imap

我正在开发一个邮件客户端应用程序,该应用程序使用IMAP c-client库同步GMail帐户的电子邮件。

如何在不盲目搜索所有未读电子邮件的情况下,在邮箱中获取最近看不见/未读过的电子邮件?

邮件搜索需要在每次同步时将所有未读电子邮件提取到客户端,但在每次同步时执行都是非常昂贵的操作。 是否有更好的方法可以向客户端传达任何未读的电子邮件,这些电子邮件在之前与服务器的交互中未同步?

例如,Thunderbird能够通过某种机制同步看不见的电子邮件(可能通过盲目搜索所有看不见的电子邮件),因为IDLE命令不会通知 关于他们的客户。

是否有某种机制可以告诉客户自上次同步后出现的未读电子邮件?

1 个答案:

答案 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搜索。