Search 同步(复制)IMAP消息

Search 同步(复制)IMAP消息,search,imap,Search,Imap,我有一个imap帐户(例如。some@gmail.com)我知道许多库,我可以用它们连接并将消息复制回我的目的地。我要做到以下几点, 第一次,我想下载所有邮件(包括已发送的文件夹),当我第一次下载时,我会将带有ID和UID的邮件本地保存在某个数据库中 第二次,我不想查询下载的邮件,即使它们的已读/未读状态、任何标志或已删除标志已更改或已清除 我们的目标是在本地下载和同步每封邮件,一次且仅第一次 现在我对IMAP消息知之甚少,它们有一个叫做ID、UID和MessageID的东西。ID可能是当前文件

我有一个imap帐户(例如。some@gmail.com)我知道许多库,我可以用它们连接并将消息复制回我的目的地。我要做到以下几点,

  • 第一次,我想下载所有邮件(包括已发送的文件夹),当我第一次下载时,我会将带有ID和UID的邮件本地保存在某个数据库中
  • 第二次,我不想查询下载的邮件,即使它们的已读/未读状态、任何标志或已删除标志已更改或已清除
  • 我们的目标是在本地下载和同步每封邮件,一次且仅第一次
  • 现在我对IMAP消息知之甚少,它们有一个叫做ID、UID和MessageID的东西。ID可能是当前文件夹中的偏移量,UID是当前帐户中的数字ID,MessageID是唯一的字符串

    现在我想知道,在查询文件夹时应该使用什么搜索,这样一旦下载的邮件就不会返回给我

    我计划使用这个库,它提供了使用自定义字符串进行搜索并返回int数组的能力


    假设我有一个MaxID,我只想下载ID或UID大于MaxID的消息。我应该用哪一个?UID或ID?

    您应该将UID与UID有效性结合使用。这两个值都是特定于文件夹的

    有一个信息RFC描述了IMAP客户机应该如何进行同步(,第4.3节)。本文建议发出以下两个命令:

    tag1 UID FETCH <lastseenuid+1>:* <descriptors>
    tag2 UID FETCH 1:<lastseenuid> FLAGS
    
    tag1 UID FETCH:*
    tag2 UID获取1:标志
    
    第一个命令用于获取所有未知邮件所需的信息(不知道有多少邮件)。第二个命令用于同步已看到邮件的标志


    AFAIK这种方法被广泛使用。因此,许多IMAP服务器都包含优化以快速提供此信息。通常,网络带宽是限制因素。

    假设有两个文件夹,收件箱和垃圾邮件,文件夹中的最大UID分别为1000和100。现在,如果在两个同步时间之间,如果UID为101的消息以垃圾邮件形式接收,并且用户将其移动到收件箱中,UID会发生什么变化?此邮件是否使用1001获得新UID?IMAP不支持移动操作,而是必须将电子邮件复制到目标文件夹并从源文件夹中删除。UID在文件夹中是唯一的,当一封电子邮件附加或复制到文件夹中时,该电子邮件得到的UID大于此文件夹中以前使用的所有UID。此外,我还了解了有关搜索的信息,因为,每天同步是否更好?我想尽量减少服务器跳闸,为什么我需要关心UIDVality?有很多方法可以同步IMAP客户端,但我认为使用
    搜索没有好处,因为
    。关于UID的有效性,这一点很重要的原因有几个:如果服务器必须对电子邮件重新编号(例如,由于UID溢出),它也会更改UID的有效性。如果删除一个文件夹并创建一个同名的新文件夹,UID将以1重新开始。客户端检测更改的唯一方法是UIDVality,这将是不同的。你能阅读并给我一些关于这个问题的提示吗?