【发布时间】:2013-03-01 03:50:28
【问题描述】:
我正在编写一个脚本,通过 IMAP 从一个电子邮件地址获取所有电子邮件。
目前我正在获取每个文件夹(邮箱)并从每个文件夹中保存最高(获取的)UID,以便下次同步时我开始以最高的 UID+1 获取。但是如果一个文件夹被删除并且有人创建了一个同名的新文件夹怎么办。 UID 仅用于单个文件夹,将被重置。
我似乎找不到任何方法来找到邮箱(文件夹)的任何唯一标识符。
【问题讨论】:
我正在编写一个脚本,通过 IMAP 从一个电子邮件地址获取所有电子邮件。
目前我正在获取每个文件夹(邮箱)并从每个文件夹中保存最高(获取的)UID,以便下次同步时我开始以最高的 UID+1 获取。但是如果一个文件夹被删除并且有人创建了一个同名的新文件夹怎么办。 UID 仅用于单个文件夹,将被重置。
我似乎找不到任何方法来找到邮箱(文件夹)的任何唯一标识符。
【问题讨论】:
这正是UIDVALIDITY 的用途。这是一个标识文件夹名称的化身的“cookie”。当您SELECT 一个文件夹时,它会发送给您。你应该保存它,如果它改变了,你就扔掉你知道的关于那个文件夹的所有东西。
如果需要,请参阅 RFC 3501 了解更多详细信息。
【讨论】:
我建议您存储mail size 也对应于uids。如果您的cient 上存储的最大uid 大于服务器返回的最大uid(文件夹删除情况),请比较uid 和相应的邮件大小。
从UID+1 获取邮件的想法本身就有很多缺陷......
如果通过其他接口(web/pop)或通过其他客户端从服务器删除了一组邮件怎么办,那么你将如何在 imap 客户端上同步它?我假设您会为此调用 uid fetch 命令...如果您这样做,那么您可以比较 uid 和邮件大小以进行交叉验证。
为了获得更好的结果,您也可以使用UIDVALIDITY 的概念。但是你不能太依赖它,因为我看到一些 imap 服务器没有正确使用它。
【讨论】: