3

我想获取我附加的消息的消息 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

1 回答 1

4

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

如果可用,您可能希望使用UIDPLUSIMAP 扩展,并查阅APPENDUID响应代码。如果由于某种原因这不可用,那么您最可靠的选择是发送UID SEARCH带有一个条件的命令,即与您刚刚附加的消息HEADER的标题相匹配。Message-Id如果你没有得到或得到一个以上的 UID,那么你就完蛋了。

于 2013-05-30T12:45:24.497 回答