Как определить UID сообщения в IMAP - PullRequest
5 голосов
/ 30 марта 2010

Я работаю в проекте почтового клиента с использованием C #. Я использую протоколы POP и IMAP для связи с сервером. Проблема в том, что я не могу понять, почему, когда я хочу получить UID для сообщения, результаты от сервера POP и сервера IMAP отличаются.

POP
C: UIDL 1
S: +OK 1 UID2-1269789826

и

IMAP
C: $ FETCH 1 (UID)
S: * 1 FETCH (UID 2)
S: $ OK Fetch completed.

Почему результат для получения UID так отличается? В IMAP есть еще одна функция для этого? Любая помощь приветствуется. Спасибо.

Ответы [ 2 ]

11 голосов
/ 30 марта 2010

POP3 и IMAP - это два разных протокола. UID, используемые этими двумя протоколами, не связаны и не должны быть одинаковыми вообще. Фактически UID POP3 является произвольной строкой, а UID IMAP - 32-разрядным числом (передается в виде строки).

Теоретически, можно написать почтовый сервер, который поддерживает IMAP и POP3, используя один и тот же UID для обоих протоколов, но я не знаю ни одного сервера, который бы на самом деле делал это. На практике вы должны обрабатывать идентификаторы POP3 и IMAP как несвязанные значения.

RFC 1939 (POP3): Уникальный идентификатор сообщения - это произвольная определяемая сервером строка, состоящая из от 1 до 70 символов в диапазоне от 0x21 до 0x7E, которая однозначно идентифицирует сообщение в почтовом ящике и сохраняется в сеансах.

RFC 3501 (IMAP): (Атрибут сообщения уникального идентификатора (UID) - это) 32-битное значение, назначаемое каждому сообщению, которое при использовании со значением достоверности уникального идентификатора (см. Ниже) образует 64-битное значение, которое НЕ ДОЛЖНО ссылаться на любое другое сообщение в почтовом ящике или любом последующем почтовом ящике с тем же именем навсегда.

3 голосов
/ 21 декабря 2013

Очень важный факт IMAP

Это то, чему я научился играть с GMail (я ожидаю, что другие системы будут такими же):

  • Отправил сообщение в мой почтовый ящик
  • У него есть UID 45
  • Переместить сообщение на нежелательную
  • Теперь он имеет UID 5 (потому что UID уникален для каждого почтового ящика)
  • Переместить обратно во входящие
  • У него теперь UID 46
  • Переместить обратно в мусор
  • Теперь у него есть UID 6
  • Получи идею ...

Я переместил сообщения с помощью пользовательского интерфейса GMail.com

Насколько я могу судить, UID полезен только для поиска последних писем в папке. Вы можете запустить команду Поиск ("UID 34:*), чтобы получить все сообщения в папке с UID 34 или выше.

Но не начинайте использовать UID в качестве ключа к этому сообщению в базе данных, иначе у вас появятся ошибки.

Я думаю, что собираюсь взять полученное время и хэшировать его с содержанием сообщения, чтобы получить UID, который я действительно могу поместить в базу данных.

...