我正在编写一个脚本,通过 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 服务器没有正确使用它。