Outlook входит в систему на сервере POP3 и выдает команды STAT
, LIST
и UIDL
; затем, если он решает, что у пользователя нет новых сообщений, он выходит из системы. Я наблюдал, как Outlook делает это при отслеживании сетевого трафика между клиентом и моим сервером PMail-DBMail. Я видел, что Outlook не может обнаружить новые сообщения на сервере POP3, используя этот метод. Thunderbird ведет себя аналогично, но я никогда не видел, чтобы он не обнаруживал новые сообщения.
Выполните команды LIST
и UIDL
на сервере после входа в систему. LIST
дает индексный номер (линейная позиция сообщения в почтовом ящике) и размер каждого сообщения. UIDL
дает вам тот же индекс и вычисленное значение хеш-функции для каждого сообщения.
Для каждого пользователя вы можете сохранить размер и значение хеша, заданное LIST
и UIDL
. Если вы видите тот же размер и хеш-значение, предположите, что это одно и то же сообщение. Когда данное сообщение больше не появляется в этом списке, предположим, что оно было удалено, и удалите его из локальной памяти.
Для полной чистоты запомните относительное положение пар размер / хэш в списке сообщений, чтобы вы могли поддерживать возможность их повторения. (Мое предположение о новой ошибке обнаружения сообщений в Outlook заключается в том, что иногда эти значения повторяются, по крайней мере, для DBMail, но Outlook запоминает их даже после их удаления и навсегда считает их не новыми. Если бы это был я, я бы попытался избежать этого поведение.)
Сноска. Помните, что заголовки являются частью сообщения. По этой причине не доверяйте ничему в заголовке: даты, отправители и даже информация о передаче сервера могут быть легко подделаны и не могут считаться уникальными.