3

我正在构建 PHP 应用程序以将 IMAP 邮箱与本地副本同步。我需要找到一种方法来仅加载我尚未加载的 IMAP 文件夹中的消息。

PHP IMAP 库有函数 imap_search 来做类似的事情。例如, imap_search($conn, 'SINCE "8 August 2012"', SE_UID);

但是,此解决方案效果不佳。电子邮件通常有错误的日期(可能是未来的日期)并且同步工作错误。

从 PHP 与 IMAP 服务器同步的最佳做法是什么?如何加载我尚未加载的消息的真实列表?目前我只能看到一种方法 - 在 IMAP 服务器上加载所有电子邮件的 ID,如果 ID 保存在本地,则与列表进行比较。有没有更好的办法?谢谢。

4

2 回答 2

3

如果您从最低 UID 到最高 UID 获取(并且文件夹中的新邮件的 UID 总是比任何以前的邮件都高),那么您可以搜索UID <uid>:*,其中 uid 比您当前拥有的最高 UID 大一。

于 2013-05-22T15:25:17.133 回答
0

我在 IMAP 规范中找到了 UID 的描述

“分配给每条消息的 32 位值,当与唯一标识符有效性值(见下文)一起使用时,形成一个 64 位值,该值不得永远引用邮箱中的任何其他消息或具有相同名称的任何后续邮箱. 唯一标识符在邮箱中以严格的升序方式分配;当每条消息添加到邮箱时,它被分配的 UID 比之前添加的消息更高。与消息序列号不同,唯一标识符不一定是连续的。”

所以我可以记住最后处理的 UID 并只加载具有更大 UID 的消息。

于 2013-05-23T12:22:45.907 回答