使用IMAP从上次同步到php应用程序获取新到的电子邮件

时间:2014-12-24 10:53:14

标签: php email imap

我想创建一个php脚本来使用IMAP获取新电子邮件并将它们存储在我的数据库中。我想知道如何识别上次同步后到达收件箱和其他邮箱的新电子邮件。

相同的IMAP电子邮件帐户与Outlook相关联,因此可能已经在Outlook中看到了新的电子邮件,这些电子邮件可能尚未同步到PHP应用程序。我不能使用UNSEEN标志,因为在多个地方使用相同的邮箱。我想知道使用上次电子邮件同步获取新电子邮件的最佳方法是哪种方式。

说收件箱中有100封电子邮件。我的php程序最后一次同步50。现在它必须同步下50封电子邮件。但是在那些新的50封邮件中,使用outlook(已经看过)检查了25封电子邮件。因此,当我对PHP应用程序使用UNSEEN标志标准时,它只提供了25封尚未读取的电子邮件,但我应该收到50封电子邮件。

我应该可以使用PHP应用程序上一次电子邮件同步中的内容来获取下一组。但我不知道应该使用哪一个。

1 个答案:

答案 0 :(得分:3)

您可能正在寻找IMAP协议中的唯一ID 。您的服务器不应更改会话中的唯一ID(即下次连接到服务器时),以便您可以查找:

这些数字具有某些属性,我会说他们可以表达的顺序以及唯一性可以帮助您不搜索所有电子邮件:

  

唯一标识符      在邮箱中以严格提升的方式分配;每个人      邮件被添加到邮箱,它被分配了比UQ更高的UID      先前添加的消息。与消息序列不同      数字,唯一标识符不一定是连续的。

当您使用 UID 时,您必须使用该部分中概述的 UIDVALIDITY ,因为存储时 UID 它们到数据库是基于 UIDVALIDITY 的值。如果 UIDVALIDITY 发生更改,则需要重新为邮箱建立索引。

另类邮箱

或者创建另一个邮箱并告知邮件服务器收到的邮件,以便将副本转发到该邮箱。邮件客户端(Outlook)不会标记这些邮件,因为您不共享该邮箱。您已经拥有了一个数据库服务器(因为IMAP可能算作电子邮件的一个),所以这可能就是您想要的方式。

将邮件传递给您的脚本

作为另一种选择,只需将邮件服务器配置为将新电子邮件传递给在数据库中插入这些邮件的脚本。概述(以及一些其他方法):