同步(复制)IMAP消息

时间:2012-05-21 16:35:34

标签: search imap

我有一个imap帐户,(例如some@gmail.com),我知道很多可以连接的库,并将邮件复制回目的地。我想实现以下目标,

  1. 第一次,我想下载所有邮件(包括已发送的文件夹),当我第一次下载时,我会在某些数据库中本地保存带ID和UID的邮件。
  2. 第二次,我不想查询已下载的邮件,即使他们的已读/未读状态或任何标记或已删除的标记已更改或已被清除。
  3. 我们的目标是在本地下载和同步每条消息,这是第一次。
  4. 现在我对IMAP消息知之甚少,他们有一些名为ID,UID和MessageID的东西。 ID可能是当前文件夹中的偏移量,UID是当前帐户中的数字ID,而MessageID是唯一字符串。

    现在我想知道,在查询文件夹时我应该使用什么搜索,以便下载后的邮件不会返回给我。

    我打算使用http://mailsystem.codeplex.com/库,它提供了使用自定义字符串进行搜索并返回int数组的功能。

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

1 个答案:

答案 0 :(得分:3)

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

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

tag1 UID FETCH <lastseenuid+1>:* <descriptors>
tag2 UID FETCH 1:<lastseenuid> FLAGS

第一个命令用于获取所有未知邮件所需的信息(不知道有多少邮件)。第二个命令用于同步已经看过的邮件的标志。

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