PHP使用POP3在服务器上保留邮件

时间:2014-07-31 08:38:43

标签: php email imap pop3

项目背景:

我正在开展一个项目,其目标是跟踪邮箱中收到的所有电子邮件。 该应用程序连接到邮箱并将每封电子邮件存储为文件。

无论应用行为如何,用户都必须能够使用自己的邮箱。

我正在写这个时使用pop协议。

应该如何运作:

让我们说邮箱中有10封未读邮件,但尚未存储在应用程序中。

案例1:用户首先连接:他读取,删除其他人,将其标记为垃圾邮件或其他内容:应用程序仍必须将每个10emails存储为文件。

案例2 :应用首先连接,存储10封电子邮件,然后执行某些操作以永不再存储 ,但用户何时将连接到他的邮箱,他仍然应该看到10封未读的电子邮件,并随心所欲地做任何事情。

目前如何运作..:

该功能会检索每封未读电子邮件,并将其存储为文件(也会下载任何附件)。

第一种情况非常有效,我将Outlook与我的邮箱一起使用,无论我对我的电子邮件做什么,该应用程序仍会看到电子邮件未读,找到它们,最后完成工作。< / p>

然而,第二种情况似乎无法正常工作:存储电子邮件后,我使用 imap_delete 标记这些电子邮件以进行删除,然后,当一切都完成后,我使用 imap_close 使用 CL_EXPUNGE 标记删除它们,以便应用程序下次不会再次存储它们...

问题是,这也会删除来自服务器的电子邮件......这意味着在某些情况下,虽然电子邮件已经存储,但用户永远不会在邮箱中看到它们......

提问时间

在PHP中,有没有办法只为我的应用删除电子邮件,所以它不会多次存储相同的电子邮件,而不是从服务器中删除它们? 我知道前景使它成为可能,因为如果没有,它在第一种情况下也不会起作用......

这有什么解决方案吗? 是否有一个标志或函数可以在php中使用pop协议正确执行?或者是否可以在php中使用imap协议和imap函数?

1 个答案:

答案 0 :(得分:0)

您的问题是IMAP协议。在使用IMAP时,您总是使用存储在服务器上的邮件,因此如果您将它们标记为已读,则表示它们已在服务器上标记为已读,因此任何进一步的连接(使用IMAP)都不会看到未读的邮件,如果您删除它们,则将其从服务器中删除,因此无法进一步查看(使用POP时 - 如果之前从未连接过,或者是IMAP)。

您应该切换连接协议以便使用POP3,这样就可以将邮件的副本下载到您的计算机上(实际上是执行PHP脚本的计算机)并使用本地副本。

有关详细信息,请参阅this question