2013-05-30 3 views
3

Id хотел бы получить сообщение uid для сообщения, которое я добавил. Вот код, который не тестировался, и я уверен, что это неправильно:PHP IMAP get uid после использования imap append для добавления отправленной почты в imap почтовый ящик

$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

Нет, это неправильно - у вас есть условие гонки, в котором вы попадете, если еще одно сообщение поступит между вами, когда вы получите сообщение и время, когда вы проконсультируете количество сообщений.

Возможно, вы захотите использовать UIDPLUS IMAP extension, если имеется, и обратитесь к коду ответа APPENDUID. Если по какой-либо причине это недоступно, ваша самая надежная ставка отправляет команду UID SEARCH с одним условием, HEADER соответствует заголовку Message-Id сообщения, которое вы только что добавили. Если вы не получите ни одного или более одного UID, тогда вы ввернуты.

Смежные вопросы