Где Thunderbird хранит UID последнего сообщения, загруженного через POP? - PullRequest
8 голосов
/ 25 ноября 2008

Я использую Thunderbird для получения электронной почты, используя POP3. У меня есть Thurnderbird, настроенный на то, чтобы оставлять электронную почту на сервере. Допустим, однажды я использую POP3 для получения (RETR) 10 сообщений электронной почты, а затем выхожу на ночь. За ночь еще 10 сообщений отправляются на мой почтовый ящик. Когда я запускаю Thunderbird на следующее утро, команда STAT должна показать 20 сообщений. Однако Thunderbird не должен загружать первые 10 сообщений; оно должно начинаться с сообщения 11 (или уникального идентификатора или UID для сообщения 11). Thunderbird отправит команду POP3 UIDL, а затем сравнит UID с UID последнего сообщения, полученного Thunderbird вчера. Он обнаружит, что последний UID соответствует списку UIDL для сообщения 10, затем Thunderbird будет RETR 11, RETR 12 и т. Д.

В моем случае команда POP3 STAT показывает, что на POP-сервере у меня 5379 сообщений. Я уже получил около 5000 из них. По какой-то причине Thunderbird хочет загрузить все 5379 сообщений вместо того, чтобы начинать с 5001. Я пытаюсь отладить это и искал UID, который Thunderbird считает последним полученным сообщением.

Кто-нибудь знает, где Thunderbird (в Windows) хранит последний UID, который он будет использовать для сравнения с UIDL (список)?

Есть ли способ установить его вручную, чтобы я мог заставить Thunderbird начать поиск где-то рядом с 5001?

Ответы [ 3 ]

4 голосов
/ 17 февраля 2009

Thunderbird имеет файл с именем popstate.dat , который содержит UID, метку времени (эпоху) и флаг. Флаг указывает действие, которое Thunderbird должен выполнить для связанного сообщения.

Очевидно, Thunderbird на самом деле не работает, как я описал выше. Я думаю, что Thunderbird делает следующее. Он отправляет команду POP3 UIDL, чтобы получить список UID, хранящихся на сервере POP. Затем он сравнивает этот список с UID, хранящимся в popstate.dat. Любые UID, которых еще нет в popstate.dat, являются новыми сообщениями для извлечения. Команда UIDL ранее вернула номер сообщения и связанный с ним UID. Затем Thunderbird должен выполнить команду POP3 RETR, используя номер сообщения, связанный с UID, который он еще не получил. Thunderbird также должен посмотреть на флаг в popstate.dat и предпринять любые действия для связанного сообщения. Например, флаг d говорит Thunderbird удалить соответствующее сообщение. Флаг f означает, что Thunderbird имеет только усеченную часть сообщения и должен получить полное сообщение.

В какой-то момент Thunderbird обновляет popstate.dat новыми сообщениями. Я думаю, что это происходит в пакетном обновлении до popstate.dat после того, как все действия были выполнены. То есть, если нужно получить 10 новых сообщений, popstate.dat не будет обновлено, пока не будут получены все 10 сообщений.

Я думаю, что моя проблема находится на сервере. По-видимому, наша инфраструктура была обновлена ​​до новой версии POP-сервера, и новые версии были назначены для новой версии. У моего popstate.dat были все старые UID. UIDL на новый POP-сервер отправляет список из 5000+ UID, которых Thunderbird не указал в popstate.dat. Итак, Thunderbird приступил к загрузке всех 5000+ сообщений. Если бы новый POP-сервер сохранил старые UID, то Thunderbird увидел бы, что я уже получил большинство из 5000+ сообщений и просто скачал те, которых у меня не было. Я думаю, что большинство людей в моей организации используют Outlook и не используют POP3, и, тем не менее, обновление версии было сделано для POP-сервера, что не вызывало проблем для этих пользователей. Похоже, что для того, чтобы новый сервер имел те же идентификаторы UID, что и старый сервер, потребовалось дополнительное внимание. Живи и учись!

0 голосов
/ 26 января 2009

В Thunderbird есть расширение для поиска дубликатов и их удаления. например на основе идентификатора сообщения (который обычно генерируется исходным отправителем письма и, следовательно, не изменяется при обновлении инфраструктуры).

0 голосов
/ 03 января 2009

Какая версия серверного программного обеспечения существует?

http://courier.sourcearchive.com/documentation/0.60.0-2/pop3dserver_8c-source.html

00718 ** UIDL сообщения - это просто имя файла, до первого символа MDIRSEP

Может быть, вам просто нужно заменить первую часть UIDL в popstate.dat на новую?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...