我正在编写一个脚本,通过IMAP从电子邮件地址中提取所有电子邮件。
目前我正在获取每个文件夹(邮箱)并从每个文件夹中保存最高(获取的)UID,因此下次同步时我会以最高UID + 1开始获取。但是,如果单个文件夹被删除并且有人创建了具有相同名称的新文件夹,该怎么办呢? UID仅适用于单个文件夹,将被重置。
我似乎无法找到任何方法来查找邮箱(文件夹)的任何唯一标识符。
答案 0 :(得分:1)
这正是UIDVALIDITY
的用途。这是一个'cookie',用于标识文件夹名称的化身。当您SELECT
文件夹时,它会发送给您。你应该保存它,如果它改变了,你就会丢弃你所知道的关于该文件夹的一切。
如果需要,请参阅RFC 3501以获取更多详细信息。
答案 1 :(得分:0)
我建议您存储与mail size
对应的uids
。如果存储在客户端的max uid大于服务器返回的max uid(文件夹删除情况),则比较uid和相应的邮件大小。
UID+1
本身获取邮件的想法已经有很多瑕疵......
如果通过某个其他界面(web / pop)或通过其他客户端从服务器删除了某组邮件,那么你将如何在imap客户端上同步它呢?我假设您将为此调用uid fetch
命令...如果您这样做,那么您可以比较uids和邮件大小以进行交叉验证。
为了获得更好的结果,您也可以使用UIDVALIDITY
的概念。但你不能依赖它,因为我已经看到一些没有正确使用它的imap服务器。