PHP IMAP获取uid后,使用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,我只是想弄清楚这一点。

不,这是错误的——这里有一个竞争条件,如果在APPEND处理消息和查询消息数量之间有另一条消息到达,您将遇到这个条件。

您可能希望使用UIDPLUS IMAP扩展(如果可用),并参考APPENDUID响应代码。如果由于某种原因无法使用,那么最可靠的方法是发送一个UID SEARCH命令,并附带一个条件,即与您刚刚附加的消息的Message-Id头匹配的HEADER。如果您没有得到一个或多个uid,那么您就完蛋了。

最新更新