2010-06-02 55 views
0

我试图创建连接到IMAP服务器并处理电子邮件,因为他们进来,我把它接近的工作一个PHP守护进程,但守护程序始终抓住原有的电子邮件,它发现守护进程第一次加载。我相信这是因为我在父进程中打开IMAP连接。示例如下:用PHP System_Daemon和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服务器的连接并仍然收到新电子邮件?

回答

1

在IMAP,邮件留在服务器上。所以每次你来的时候,如果你没有明确地删除它们,那么旧的电子邮件仍然存在。为了避免处理这些邮件,你可以有,让你之前处理邮件量的变种,所以你可以从$ I = 0去(假设最后到达)至$ I <是$ var其中$ VAR代表的数邮件已经处理完毕。

编辑:

既然你通过imap_delete删除邮件,在每个循环做一个imap_expunge。

编辑2:

使用imap_reopen,我想每个循环后使用imap_reopen($imapConnection, "{domain.tld}INBOX");我的服务器上,你的脚本,现在看到新邮件。不会执行新的身份验证,只需移动您的流。

+0

我居然在循环中删除的邮件我做处理它们之后。如果我要删除电子邮件,我还需要做什么? – mike 2010-06-02 15:09:14

+0

另外,一旦守护进程启动后,它看起来并没有发现之后出现的新电子邮件。这就是为什么我认为它与循环之外的连接有关。它甚至不知道我删除了电子邮件并继续循环播放相同的电子邮件。 – mike 2010-06-02 15:13:27

+0

好的。也许你有一个缓存问题,你可以用选项OP_SHORTCACHE尝试[imap_open](http://fr.php.net/manual/en/function.imap-open.php)? – 2010-06-02 15:21:57