1

我有一个 imap 帐户(例如 some@gmail.com),并且我知道许多库,我可以通过这些库连接并将消息复制回我的目的地。我想实现以下,

  1. 第一次,我想下载所有消息(包括已发送的文件夹),当我第一次下载时,我会将带有ID和UID的消息保存在本地某个数据库中。
  2. 第二次,我不想查询下载的消息,即使它们的已读/未读状态或任何标志或已删除标志已更改或已被清除。
  3. 我们的目标是在本地下载和同步每条消息,而且只有第一次。

现在我对 IMAP 消息知之甚少,他们有一些叫做 ID、UID 和 MessageID 的东西。ID 可能是当前文件夹中的偏移量,UID 是当前帐户中的数字 id,MessageID 是唯一字符串。

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

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

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

4

1 回答 1

3

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

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

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

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

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

于 2012-05-22T21:26:50.167 回答