Вопрос

Я работаю в проекте почтового клиента с использованием 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 есть еще одна функция для этого?Любая помощь приветствуется.Спасибо.

Это было полезно?

Решение

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

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

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

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

Другие советы

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

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top