【发布时间】:2017-05-18 19:36:03
【问题描述】:
因为 POP3 不支持在 IMAP 安装中使用的 SEEN 标志,你如何使用 php 的 imap_search() 方法从服务器只检索新消息?这里还有一些其他类似的帖子最终成为死胡同,或者用户建议根据存储的数据库检查邮件 ID,但没有明确的方法可以从 POP3 邮件服务器中仅提取新邮件而不必提取所有邮件和循环遍历每一个,看看它是否是新的。
我尝试使用以下方法设置标志:
$status = imap_setflag_full($inbox, $email_number, "\\Seen \\Flagged", ST_UID);
并使用它来检索:
$emails = imap_search($inbox,'UNSEEN');
【问题讨论】:
-
Pop3 不支持搜索,不支持标志。 POP3 中没有 SEEN 消息的概念,只有您拥有的消息和没有的消息。
-
对。我想我想了解的是电子邮件客户端如何连接并且能够在不循环所有消息的情况下提取最近的消息以检查它是否已被下载。当然有更好的方法,因为在从服务器获取新邮件时,几十万封电子邮件的收件箱可能需要很长时间才能循环。
-
作为替代方案,电子邮件号码是否总是链接到相同的电子邮件?即:如果我们这样做
for($emails as $email_number){ },每个 $email_number 是否总是与同一电子邮件相关联?或者当消息被删除和重新分配时,这种情况会改变吗? -
POP 中的 UIDL 命令为每封邮件提供一个唯一标识符。不幸的是,您必须下载 while 列表。由于这个原因,POP3 在处理大型邮箱方面很糟糕。它被设计为下载和删除协议。