我需要为某些IMAP服务器上的电子邮件编写解析器。它作为cron任务运行,并将结果存储在DB中。
我需要一种方法只获取以前运行时未解析过的消息。
现有的数据库架构表明实施者应该使用UID来跟踪某个特定邮箱的“新”消息。我想知道它是否正确...
我所看到的是RFC3501表示UID,UIDVALIDITY和邮箱名称在不同情况下都会发生变化。
更具体地说,UID可能会在会话之间发生变化,您可以判断UIDVALIDITY是否已更改。
因此,我不能将UID与UIDVALIDITY存储在数据库中以获取消息,并确保在将来的运行中这对数字不会毫无意义。
RFC3501也说:唯一标识符必须始终在邮箱中严格提升。
因此我们假设UIDVALIDITY发生了变化。将为邮箱重新生成所有UID。
这是否意味着上一条消息的前一个UID 1000将严格高于1000?或者它只是意味着较旧的消息必须具有比较新的消息更低的UID并且与先前的UID无关?
此外,如果我要绑定到Message-ID而不是UID。我发现RFC-2822说消息ID应该存在于一条消息中,这意味着根本就没有消息ID。
那么如何跟踪我已经分析过哪些消息以及解析器运行之间哪些消息是“新的”?