2013-03-13 86 views
1

我正在编写一个脚本,通过IMAP从电子邮件地址获取所有电子邮件。IMAP邮箱标识

目前我正在提取每个文件夹(邮箱)并保存每个文件夹中最高(获取)的UID,所以我在下次同步时开始在最高UID + 1处获取。但是,如果单个文件夹被删除并且某人创建了一个具有相同名称的新文件夹会怎么样? UID仅适用于单个文件夹并将被重置。

我似乎无法找到任何方式来找到邮箱(文件夹)的任何唯一标识符。

回答

1

这正是UIDVALIDITY的用途。这是一个标识文件夹名称化身的'cookie'。它是当你SELECT文件夹发送给你的。你应该保存它,如果它改变了,你会丢掉你对该文件夹的所有知识。

如果您需要更详细的信息,请参阅RFC 3501。

+0

因此,UIDVALIDITY返回一个字符串或int,它将为该文件夹提供一个UNIQUE标识符? – Floris 2013-03-15 21:59:01

+0

这是一个整数,是的,如果它是具有相同名称的文件夹的新化身,则应该改变它。 – Max 2013-03-16 04:48:46

0

我会建议你存储mail size也对应uids。如果您的cient上存储的最大uid大于服务器返回的最大uid(文件夹删除案例),则比较uid和相应的邮件大小。

UID+1获取的电子邮件本身已经有洙许多缺陷.... (网络/ POP),如果有什么一组特定的邮件从服务器通过一些其他的接口被删除或通过其他客户的想法,那么你将如何在imap客户端上同步它?我想你会为此调用一个uid fetch命令......如果你这样做,那么你可以比较uids和邮件大小进行交叉验证。

为了获得更好的效果,您还可以使用UIDVALIDITY的概念。但是你不能太依赖,因为我看到一些imap服务器没有正确使用它。