我想为我附加的消息获取消息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,那你就完了。

10-06 06:26