2010-06-02 111 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