我想为我附加的消息获取消息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合作,IM只是想解决这个问题。任何帮助都将不胜感激。
最佳答案
不,这是错误的——您有一个竞争条件,如果在您编辑消息和查询消息数量之间有另一个消息到达,您将在其中遇到该竞争条件。
如果可用,您可能需要使用APPEND
IMAP extension,并参考UIDPLUS
响应代码。如果由于某种原因这不可用,您最可靠的赌注是发送一个带有一个条件的APPENDUID
命令,即与您刚刚附加的消息的UID SEARCH
头匹配。如果你没有或者只有一个uid,那你就完了。