我正在使用IMAP c客户端库为GMail帐户同步电子邮件的邮件客户端应用程序。
如何在不盲目搜索所有未读电子邮件的情况下获取邮箱中最新的未读/未读电子邮件?
邮件搜索需要在每次同步时将所有未读的电子邮件发送到客户端,但是在每次同步时执行此操作是一项非常昂贵的操作。
是否有更好的方法可以将与上一次与服务器的交互未同步的未读电子邮件传达给客户端?
例如,雷鸟(Thunderbird)能够通过某种机制(可能是通过对所有看不见的电子邮件进行盲目搜索)来同步看不见的电子邮件,因为IDLE命令不会通知
关于他们的客户。
是否有某种机制可以告知客户自上次同步以来出现的未读电子邮件?
最佳答案
有一个IMAP扩展,用于快速标志更改重新同步(RFC-4551)。使用此扩展,可以搜索自上次同步以来已更改的所有消息(基于某种时间戳)。但是,此扩展不受广泛支持-特别是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 SEARCH可能是您最好的选择。
关于c - 除邮件搜索技术外,如何在邮箱中获取未读/未读的电子邮件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9894781/