2015-12-04 1 views
0

У меня есть одно приложение, в котором люди могут настраивать там учетную запись электронной почты через IMAP и выполнять такие операции, как чтение электронной почты, удаление, перемещение и т. Д. Я столкнулся с проблемой, что при удалении одного электронное письмо электронной почты удаляется. После отладки я обнаружил, что 2 пользователя настроили одну учетную запись электронной почты, и они удаляют письма из двух разных браузеров без обновления страницы.php: номер последовательности IMAP-сообщений изменяется после удаления одного сообщения электронной почты

Фактически после удаления одного сообщения msgno, возвращаемого imap_fetch_overview, изменяется, но на другой странице все еще открыта старая msgno, а при удалении этого сообщения удаляется другая почта.

Проверить msgno before and after delete

В приведенном выше примере после удаления почты, имеющего предмет "тест 4", msgno из "тест 6", "тест 7", "8 Тест" получает изменилось. Теперь, если какой-либо другой пользователь, который ранее открыл почту, пытается удалить почту с темой «test 7», фактически удалит почту с темой «test 8».

Для удаления электронной почты я использую функцию imap_delete, которая принимает параметр msgno в качестве параметра. Пожалуйста, помогите справиться с такой проблемой или есть способ получить уникальный идентификатор для каждой почты, которая не изменится и с использованием этого идентификатора. Я также могу выполнять операции IMAP, такие как удаление, перемещение и т. Д.

+0

Вместо этого используйте уникальные идентификаторы. Я думаю, что все функции PHP принимают флаг (например, FT_UID?), Чтобы использовать UID вместо порядковых номеров. – Max

+0

Спасибо @Max, он работает –

+0

Я добавлю в качестве ответа. – Max

ответ

0

Вместо этого используйте уникальные идентификаторы. Я думаю, что все функции PHP принимают флаг (например, FT_UID?), Чтобы использовать UID вместо порядковых номеров.

Удаление сообщений может испортить идентификаторы последовательностей, особенно если вы не обращаете внимание на ответы EXPUNGE.