使用imap append将发送的邮件添加到imap邮箱后,PHP IMAP获取uid

时间:2013-05-30 02:32:10

标签: php 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一起工作,而我正试图解决这个问题。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:4)

不,这是错误的 - 你有一个竞争条件,如果你在APPEND消息和你查询消息数量之间有另一条消息到达,你会遇到竞争条件。 / p>

您可能希望使用UIDPLUS IMAP extension(如果有),并参阅APPENDUID响应代码。如果由于某种原因无法使用,那么您最可靠的选择是发送UID SEARCH命令,其中包含一个条件,HEADER匹配您刚刚附加的邮件的Message-Id标头。如果你没有获得任何一个或多个UID,那么你就搞砸了。