我正在尝试创建一个连接到IMAP服务器的PHP守护程序,并在它们进来时处理电子邮件。我让它接近工作,但守护程序一直抓住它在第一次守护进程时发现的原始电子邮件加载。我相信原因是因为我在父进程中打开了IMAP连接。示例如下:
if ($imapConnection=imap_open($authhost,$user,$pass) or die())
{
//start daemon
while()
{
//Grab email headers
$imapHeaders = imap_headers($imapConnection);
$count = sizeof($imapHeaders)
//loop the emails
for($i = 1; $i <= $count, $i++)
{
//process the email
//delete the email
}
System_Daemon::iterate(15);
}
}
imap_close($imapConnection);
我想远离将IMAP连接放在循环中。如何在循环外保持与IMAP服务器的连接并仍然收到新电子邮件?
答案 0 :(得分:1)
在IMAP中,邮件留在服务器上。因此,每次您来,如果您没有明确删除它们,旧的电子邮件仍然存在。为了防止处理这些电子邮件,你可以使用一个var来保存之前处理过的邮件数量,这样你就可以从$ i = 0(假设最后到达的邮件)到$ i&lt; $ var其中$ var代表已经处理的邮件数量。
编辑:
由于您通过imap_delete删除邮件,请在每个循环中执行imap_expunge。
编辑2:
使用imap_reopen,我在每个循环后使用imap_reopen($imapConnection, "{domain.tld}INBOX");
尝试在我的服务器上编写脚本,它现在就看到了新邮件。不进行新的身份验证,只需移动您的流。