我正在构建PHP应用程序以将IMAP邮箱与本地副本同步。 我需要找到一种方法来仅加载我尚未加载的IMAP文件夹中的邮件。
PHP IMAP库具有imap_search函数来做类似的事情。 例如,imap_search($ conn,' SINCE" 2012年8月8日"',SE_UID);
然而,这个解决方案并不能很好地运作。通常电子邮件的日期错误(可能是将来的日期),同步工作错误。
从PHP同步IMAP服务器的最佳做法是什么?如何加载我尚未加载的真实邮件列表? 现在我只能看到一种方法 - 在IMAP服务器上加载所有电子邮件的ID,并在本地保存ID时与列表进行比较。 还有更好的方法吗?感谢。
答案 0 :(得分:3)
如果您从最低UID获取到最高UID(并且该文件夹中的新邮件的UID总是高于以前的任何邮件),那么您可以搜索UID <uid>:*
,其中uid比您目前拥有的最高UID。
答案 1 :(得分:0)
我在IMAP规范中找到了UID的描述
“分配给每条消息的32位值,当与唯一标识符有效性值(见下文)一起使用时,形成一个64位值,绝不能引用邮箱中的任何其他邮件或任何后续邮箱永久相同的名称。唯一标识符在邮箱中以严格升序的方式分配;当每条消息被添加到邮箱时,它被分配的UID高于之前添加的消息。与消息序列号不同,唯一标识符是不一定是连续的。“
所以我记得上次处理过的UID,只加载UID较大的邮件。