2012-04-14 79 views
1

我正在从PHP项目工作,应该从IMAP服务器获取电子邮件,并将它们存储在本地数据库中。 相同的IMAP服务器可以被其他电子邮件客户端使用,例如发件箱等。如何将IMAP消息标记为已获取?

问题是如何知道哪些消息我已经提取,哪些我没有?我想按日期时间使用搜索,但它是可靠的(我会有cronjob,每分钟访问用户邮箱,并检查电子邮件,但不确定日期时间是否会导致一些问题,例如在几乎同时到达短信和大附件留言)。

我在想系统标签,但用户可以通过电子邮件客户端修改它们,所以我可以依赖它们,而不想修改它们并混淆客户端。

接下来我想到的是自定义标签,但并非所有IMAP服务器都支持它们(并且我们的软件需要尽可能灵活)。

任何好主意我怎么能解决这个问题?

回答

3

跟踪您正在同步的文件夹的当前最高同步UID,并验证该文件夹的UIDVALIDITY值是否匹配。

唯一标识符在邮箱中以严格递增的方式分配;因为每个邮件都添加到邮箱中,所以它被分配比先前添加的邮件更高的UID。与消息序列号不同,唯一标识符不一定是连续的。

+0

http://stackoverflow.com/questions/1084780/getting-only-new-mail-from-an-imap-server 我发现了另一个类似的帖子,和我的想法磨做的,如果没有按UIDVALIDITY” t匹配。谢谢! – Ivica 2012-04-14 06:33:06

+0

存在问题。 PHP imap_search函数不支持通过UID搜索消息,似乎我只能使用日期:( – Ivica 2012-04-16 11:03:47