2013-05-30 86 views
3

我喜歡爲我添加的郵件獲取郵件uid。下面是代碼,這是未經測試,我肯定是錯的:PHP IMAP在使用IMAP追加向imap郵箱添加發送的郵件後獲得uid

$imapStream = imap_open($imapPath,$imapUser,$imapPass); 
imap_append($imapStream,$imapPath,$mail->getMailString(),"\\Seen"); 
$check = imap_check($imapStream); 
$uid=imap_uid($imapStream,$check->Nmsgs); 
imap_close($imapStream);   

基本上,imap_append調用運行imap_check後得到的消息計數我做什麼,然後我傳遞消息計數到imap_uid到得到消息uid。這不可能是正確的,但這是我第一次使用imap,而我只是想弄明白這一點。

任何幫助將不勝感激。

回答

4

不是,這是錯誤的 - 你有一個競爭條件,如果有另一條消息在你消息的編號APPEND和查詢消息的數量之間到達,你將遇到競爭條件。

您可能想要使用UIDPLUS IMAP extension(如果有),並參考APPENDUID響應代碼。如果由於某種原因無法使用,您最可靠的選擇是發送一個UID SEARCH命令,其中一個條件,HEADER匹配您剛添加的郵件的Message-Id標頭。如果你沒有收到一個或多個UID,那麼你就搞砸了。