2012-05-21 64 views
1

我有一个IMAP帐户,(例如[email protected]),我知道与我可以连接和复制的讯息传回我的目的地很多图书馆。我想达到以下,同步(复制)IMAP邮件

  1. 第一次,我想下载所有邮件(包括发送文件夹),并且当我下载的第一次,我会在一些数据库在本地保存消息ID和UID。
  2. 第二次,我不想查询下载的邮件,即使他们的读/未读状态或任何标记或删除标识被改变或者被清除。
  3. 我们的目标是下载和每一个消息在本地同步,一次且仅一次。

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

现在我想知道,在查询文件夹,这样的消息被下载一次,不会被返回给我,我应该用什么搜索。

我打算使用http://mailsystem.codeplex.com/库,并给出了自定义字符串搜索能力,并返回int数组。

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

回答

3

你应该结合UIDVALIDITY使用UID。两个值都是文件夹特定的。

存在描述IMAP客户端应该怎么做同步(RFC-4549,第4.3节)的信息RFC。文本建议发出以下两个命令:

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

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

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

+0

假设两个文件夹,收件箱和垃圾邮件,与1000和100最大UID在他们的文件夹。现在,如果在两个同步时间之间,如果在垃圾邮件中收到带有UID 101的邮件,并且用户将其移入收件箱,则UID会发生什么变化?这个消息是否会获得1001的新UID? –

+0

IMAP不支持移动操作,而不是电子邮件都将被复制到目标文件夹以及从源文件夹中删除。 UID是一个文件夹中是唯一的,并且当电子邮件被附加或复制到文件夹,电子邮件获得一个UID比这个文件夹中使用的所有以前的UID更大。 – nosid

+0

另外我发现有关搜索既然,最好每天同步?我想尽量减少服务器行程,为什么我需要关心UIDVALIDITY? –