Самое интересное про SMTP, POP3 и IMAP. Что такое POP3

Рабочая станция может не иметь достаточных ресурсов для обеспечения непрерывной работы SMTP -сервера . Для домашних ЭВМ слишком дорого поддерживать связь с Интернет круглые сутки.

Но доступ к электронной почте необходим как для таких малых узлов, так и для индивидуальных ЭВМ. Для решения этой проблемы разработан протокол POP3 ( Post Office Protocol - Version 3, STD : 53. M. Rose, RFC-1939). Этот протокол обеспечивает доступ узла к базовому почтовому серверу.

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

Более продвинутый и сложный протокол IMAP4 обсуждается в RFC-2060 ( порт 143). Об аутентификации в POP3 можно прочесть в документе RFC-1734.

В дальнейшем ЭВМ-клиентом будет называться машина, пользующаяся услугами POP3 , а ЭВМ-сервером - сторона, предлагающая услуги POP3 .

Когда пользователь ЭВМ-клиента хочет послать сообщение, он устанавливает SMTP связь с почтовым сервером непосредственно и посылает все, что нужно, через него. При этом ЭВМ POP3 - сервер не обязательно является почтовым сервером.

В исходный момент ЭВМ POP3 - сервер прослушивает TCP - порт 110. Если ЭВМ-клиент хочет воспользоваться услугами POP3 -сервера, то устанавливает с ним TCP - связь . По установлении связи POP3 - сервер посылает клиенту уведомление (например, +OK POP3 server ready ) и сессия переходит в фазу авторизации (см. также RFC-1734, -1957). После этого может производиться обмен командами и откликами.

Команды POP3 состоят из ключевых слов (3-4 символа), за которыми могут следовать аргументы. Каждая команда завершается парой символов CRLF. Как ключевые слова, так и аргументы могут содержать только печатаемые ASCII-символы. В качестве разделителя используются символы пробела. Каждый аргумент может содержать до 40 символов.

Сигнал отклика в POP3 содержит индикатор состояния и ключевое слово , за которым может следовать дополнительная информация . Отклик также завершается кодовой последовательностью CRLF. Длина отклика не превышает 512 символов, включая CRLF. Существует два индикатора состояния: положительный - "+OK" и отрицательный - "- ERR " (все символы прописные).

Отклики на некоторые команды могут содержать несколько строк. В этом случае последняя строка содержит код завершения 046 ("."), за которым следует CRLF.

На практике многострочные отклики для исключения имитации завершаются последовательностью "CRLF.CRLF".

В процессе авторизации клиент должен представить себя серверу, передав имя и пароль (возможен вариант посылки команды APOP). Если авторизация успешно завершена, сессия переходит в состояние транзакции ( TRANSACTION ). При получении от клиента команды QUIT сессия переходит в состояние UPDATE , при этом все ресурсы освобождаются и TCP - связь разрывается.

На синтаксически неузнанные и неверные команды сервер реагирует, посылая отрицательный индикатор состояния.

POP3 - сервер может быть снабжен таймером пассивного состояния (10 мин.), который осуществляет автоматическое прерывание сессии. Приход любой команды со стороны клиента сбрасывает этот таймер в нуль.

Сервер нумерует все передаваемые сообщения из своего почтового ящика и определяет их длину. Положительный отклик начинается с +OK, за ним следует пробел , номер сообщения, еще один пробел и длина сообщения в октетах. Завершается отклик последовательностью CRLF. Переданные сообщения удаляются из почтового ящика сервера. Все сообщения, передаваемые во время сессии POP3 , должны следовать рекомендациям формата Интернет сообщений .

В состоянии транзакции клиент может посылать серверу последовательность POP3 -команд, на каждую из которых сервер должен послать отклик. Далее следует краткое описание команд, используемых в состоянии транзакция .

LIST [сообщение]

Аргументы : номер сообщения ( опционно ), который не может относиться к сообщению, помеченному как удаленное. Команда может быть выдана только в режиме TRANSACTION . При наличии аргумента сервер выдает положительный отклик, содержащий информационную строку сообщения. Такая строка называется скэн-листингом сообщения ( scan

, Mail Daemon , Dovecot

Расширяемость Доп. команды (RFC 2449)

Общие сведения [ | ]

POP поддерживает простые требования «загрузи-и-удали» для доступа к удалённым почтовым ящикам. Хотя большая часть POP-клиентов предоставляет возможность оставить почту на сервере после загрузки, использующие POP клиенты обычно соединяются, извлекают все письма, сохраняют их на пользовательском компьютере как новые сообщения, удаляют их с сервера, после чего разъединяются.

Другие протоколы, в частности IMAP, предоставляют более полный и комплексный удалённый доступ к типичным операциям с почтовым ящиком. Многие клиенты электронной почты поддерживают как POP, так и IMAP; однако, гораздо меньше интернет-провайдеров поддерживают IMAP.

Версии POP2 был назначен порт 109.

Изначальная спецификация POP3 поддерживала только незашифрованный механизм входа в систему USER/PASS или управление доступом .rhosts . На данный момент, POP3 поддерживает различные методы аутентификации для предоставления разных уровней защиты от незаконного доступа к пользовательской почте. Большинство из них предоставлены механизмами расширения POP3. Клиенты POP3 поддерживают методы SASL через расширение AUTH. В рамках проекта «Афина» также был введён метод на основе Кербероса . RFC 1460 ввёл APOP в основной протокол. APOP - протокол вида «запрос/ответ» , использующий функцию хеширования MD5 . Среди клиентов, реализующих APOP, можно выделить Mozilla Thunderbird , Opera Mail , Eudora , Windows Live Mail, PowerMail, Apple Mail , и т. д.

Было высказано неофициальное предложение для спецификации «POP4», с рабочей реализацией сервера. Это предложение добавило основные функции управления папками, поддержку составных сообщений, а также управление флагами сообщений. Однако, никакого прогресса «POP4» не наблюдается с 2003 г.

Расширения [ | ]

Механизм расширений был предложен в RFC 2449 для размещения новых расширений, а также организованного объявления о поддержке опциональных команд, таких как TOP и UIDL. RFC не намеревались поощрять расширения и подтвердили, что роль POP3 заключается в предоставлении простой поддержки в основном для требования «загрузи-и-удали».

Расширения выводятся списком командой CAPA. За исключением APOP, все опциональные команды были включены в изначальный набор возможностей. Как и в стандарте ESMTP (RFC 5321), возможности, начинающиеся с "X", являются локальными.

STARTTLS [ | ]

Сравнение с IMAP [ | ]

Клиенты, которые оставляют почту на серверах, обыкновенно используют команду UIDL для получения текущего соответствия между количеством сообщений и сообщением, определяемым его уникальным идентификатором. Идентификатор произволен и может повторяться, если на ящике есть идентичные сообщения. Напротив, IMAP использует 32-битный уникальный идентификатор (UID), присваиваемый сообщениям по возрастанию (но не обязательно подряд) по мере их получения. При извлечении новых сообщений IMAP-клиенты запрашивают UID больший, чем наивысшее значение UID среди всех ранее извлечённых сообщений, в то время как POP-клиент должен выбирать из всей карты UIDL. Для больших почтовых ящиков это может потребовать значительной обработки.

MIME служит в качестве стандарта для вложений и не-ASCII текста в электронных сообщениях. Хотя ни POP3, ни SMTP не требуют MIME-отформатированного сообщения, по существу, все не-ASCII сообщения идут в формате MIME, поэтому POP-клиенты должны также «понимать» и использовать MIME. IMAP, по определению, принимает MIME-форматированные сообщения.

Состояния сеанса [ | ]

В протоколе POP3 предусмотрено 3 состояния сеанса:

Авторизация Клиент проходит процедуру Аутентификации . Транзакция Клиент получает информацию о состоянии почтового ящика, принимает и удаляет почту. Обновление Сервер удаляет выбранные письма и закрывает соединение.

Команды протокола [ | ]

Имя Аргументы Ограничения Возможные ответы
APOP [имя] Её поддержка не является обязательной * +OK maildrop has n message * -ERR password supplied for [имя] is incorrect
USER [имя] - * +OK name is a valid mailbox * -ERR never heard of mailbox name
PASS [пароль] Работает после успешной передачи имени почтового ящика * +OK maildrop locked and ready * -ERR invalid password * -ERR unable to lock maildrop
DELE [сообщение] * +OK message deleted * -ERR no such message
LIST [сообщение] Доступна после успешной аутентификации * +OK scan listing follows * -ERR no such message
NOOP - Доступна после успешной аутентификации +OK
RETR [сообщение] Доступна после успешной аутентификации * +OK message follows * -ERR no such message
RSET - Доступна после успешной аутентификации +OK
STAT - Доступна после успешной аутентификации +OK a b
TOP [сообщение] [количество строк] Доступна после успешной аутентификации * +OK n octets * -ERR no such message
QUIT - - +OK

APOP [ | ]

Команда служит для передачи серверу имени пользователя и зашифрованного пароля (digest).
[имя]
- хеш-сумма временной метки, конкатенированной с паролем пользователя, вычисленная по алгоритму MD5 . В случае поддержки этой команды временная метка получается при соединении с сервером.

USER [ | ]

Передаёт серверу имя пользователя.
[имя] - строка, указывающая имя почтового ящика.

PASS [ | ]

Передаёт серверу пароль почтового ящика.
[пароль] - пароль для почтового ящика.

DELE [ | ]

Сервер помечает указанное сообщение для удаления. Сообщения, помеченные на удаление, реально удаляются только после закрытия транзакции (закрытие транзакций происходит обычно после посыла команды QUIT, кроме этого, например, на серверах закрытие транзакций может происходить по истечении определённого времени, установленного сервером).
[сообщение] - номер сообщения.

LIST [ | ]

Если был передан аргумент, то сервер выдаёт информацию об указанном сообщении. Если аргумент не был передан, то сервер выдаёт информацию обо всех сообщениях, находящихся в почтовом ящике. Сообщения, помеченные для удаления, не перечисляются.
[сообщение] - номер сообщения (необязательный аргумент).

NOOP [ | ]

Сервер ничего не делает, всегда отвечает положительно.

RETR сообщение [ | ]

Сервер передаёт сообщение с указанным номером.
[сообщение] - номер сообщения.

RSET [ | ]

Этой командой производится откат транзакций внутри сессии. Например, если пользователь случайно пометил на удаление какие-либо сообщения, он может убрать эти пометки, отправив эту команду.

STAT [ | ]

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

TOP [ | ]

Сервер возвращает заголовки указанного сообщения, пустую строку и указанное количество первых строк тела сообщения.
[сообщение] - номер сообщения.
[количество строк] - сколько строк нужно вывести.

Аббревиатура POP3 в переводе с английского обозначает почтовый протокол 3-ей версии. Сущность данного термина заключается в том, что POP3 представляет собой протокол, предназначенный для работы с входящей корреспонденцией. Используя протокол POP3, почтовый клиент, в первую очередь, забирает письма, пришедшие на сервер, пересылает их на Ваш компьютер, а потом Вы можете работать с полученной корреспонденцией в почтовом клиенте, и Вам не придется дополнительно обращаться к почтовому серверу.

Протокол РОРЗ предоставляет пользователям возможность обращаться к своему серверу и изымать накопившиеся письма и сообщения. Важно знать, что пользователь может получить право доступа к РОР-серверу из любой точки доступа к Всемирной Сети. Для этого пользователя необходимо запустить почтовый агент (UA), который работает по протоколу РОРЗ, а затем выполнить его настройку для работы со своим почтовым сервером.

Таким образом, отдельный персональный компьютер находится во главе модели РОР. Данный компьютер функционирует исключительно как клиент постовой системы. Доставка сообщений клиенту осуществляется по протоколу РОР, а посылаются сообщения по-прежнему с использованием SMTP. На компьютере у пользователя имеются два агента-интерфейса к почтовой системе: отправки (SMTP) и доставки (РОР). Такую ситуация специалисты по разработке протокола РОР3 называют «раздельными агентами» (split UA). О концепции раздельных агентов коротко изложено в спецификации РОР3.

В протоколе РОР3 содержится информация о трех стадиях процесса получения корреспонденции:

  • авторизация
  • транзакция
  • обновление

Процесс авторизации начинается после того, как установлено соединение между сервером и клиентом РОР3. В рамках этой стадии клиент осуществляет собственную идентификацию для сервера. В случае успешной авторизации, сервер открывает почтовый ящик пользователя и после этого происходит процесс транзакции, во время которой клиент посылает серверу запрос о выдаче определенной информации (к примеру, список почтовых сообщений) или обращается к серверу с просьбой выполнить определенное действие (к примеру, выдать сообщение). Сеанс связи заканчивается на стадии обновления.

POP3-порт (протокол является стандартным интернет-протоколом прикладного уровня, который применяется локальными e-mail-клиентами для извлечения данных с удаленного сервера по TCP/IP-соединению.

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

POP3-порт: обзор технологии

Протокол POP поддерживает требования загрузки и удаления для доступа к удаленным почтовым ящикам (называемым maildrop в POP RFC). Хотя большинство клиентов имеют возможность оставлять почту на сервере после загрузки, приложения электронной почты, использующие POP, обычно подключаются, получают все сообщения, сохраняют их на ПК пользователя в качестве новых сообщений, удаляют их с сервера и затем отключают.

Другие протоколы, такие как IMAP (протокол доступа к интернет-сообщениям), обеспечивают более полный и сложный удаленный доступ к типовым операциям почтового ящика. В конце 1990-х и начале 2000-х годов меньшее число провайдеров интернет-услуг поддерживали IMAP из-за пространства для хранения, которое требовалось на аппаратном обеспечении поставщика услуг.

Современные e-mail-клиенты поддерживают POP. Со временем популярное почтовое программное обеспечение добавило поддержку IMAP.

Технические особенности

Сервер работает с известным портом 110. POP3 является последним стандартом общего использования. Зашифрованная связь для протокола запрашивается, используя команду STLS или POP3S, которая подключается к серверу с использованием уровня безопасности транспортного уровня (TLS) или уровня защищенных сокетов (SSL).

Доступные сообщения клиенту фиксируются, когда сервер почтовый ящик и верифицируется по номеру сообщения локальным для этого сеанса уникальным идентификатором, назначенным для сообщения. Этот параметр является постоянным и уникальным для maildrop и позволяет клиенту получать доступ к одному сообщению в разных сеансах. Почта извлекается и помечена для удаления по номеру сообщения. Когда клиент выходит из сеанса, почта, помеченная для удаления, удаляется из maildrop.

История и документация

Первая версия (POP1) была указана в документе RFC 918 (1984 г.), POP2 по RFC 937 (1985 г.). POP3 был инициирован RFC 1081 (1988 г.). Его текущая спецификация RFC 1939 обновлена с помощью механизма расширения RFC 2449 и механизма аутентификации в RFC 1734.

POP3 в настоящее время поддерживает несколько методов проверки подлинности, чтобы обеспечить различные уровни защиты от незаконного доступа к электронной почте пользователя. Большинство из них обеспечивается механизмами расширения POP3. Клиенты поддерживают методы аутентификации SASL через расширение AUTH. Проект MIT Athena также выпустил версию Kerberized. RFC 1460 представил APOP в основной протокол. APOP - это протокол вызова/ответа, который использует хэш-функцию MD5, чтобы избежать повторных попыток и нарушения конфиденциальности.

POP4 существует только как неофициальное предложение, добавляющее базовое управление папками, поддержку множественных сообщений, а также управление флагом сообщений для конкуренции с IMAP. Версия POP4 не развивается с 2003 года.

Расширения и спецификации

Механизм был предложен в RFC 2449 для размещения общих расширений, а также организованной поддержки дополнительных команд, таких как TOP и UIDL. RFC не намерен поощрять расширения и подтвердил, что роль POP3 заключается в предоставлении простой поддержки, главным образом, для загрузки и удаления требований к обработке почтовых ящиков.

Расширения в официальной документации называются возможностями и перечислены командой CAPA. За исключением APOP, необязательные команды были включены в начальный набор возможностей.

Расширения STARTTLS и SDPS

Данное расширение позволяет пользоваться протоколом Transport Layer Security или Secure Sockets Layer с помощью команды STLS на стандартном порту POP3, а не на альтернативном. Некоторые клиенты и серверы применяют метод альтернативного порта, который использует TCP-порт 995 (POP3S).

Demon Internet представил расширение для POP3, которое позволяет прикреплять несколько учетных записей к одному домену, и стал известен как стандартная коммутируемая служба POP3 (SDPS). Для доступа к каждой учетной записи логин включает имя хоста, как john @ hostname или john + hostname.

Протокол Kerberized Post Office

При вычислении локальные клиенты электронной почты могут использовать интернет-протокол Kerberized Post Office Protocol (KPOP), для получения электронной почты с удаленного сервера по TCP/IP-соединению. Протокол KPOP основан на протоколе POP3 с различиями в том, что он добавляет безопасность Kerberos и работает по умолчанию по номеру TCP-порта 1109 вместо 110. Одна версия программного обеспечения для почтового сервера находится на сервере Cyrus IMAP.

Сравнение с IMAP

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

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

POP обрабатывает почтовый ящик, как один магазин, и не имеет понятия о папках.

Клиент IMAP выполняет сложные запросы, запрашивает сервер для заголовков или содержания определенных сообщений или ищет письма, соответствующие определенным критериям. Сообщения в почтовом репозитории могут быть отмечены различными флагами состояния (например, «удалены» или «ответы»), и они остаются в хранилище до тех пор, пока пользователь явно не удалит их.

IMAP предназначен для управления удаленными почтовыми ящиками, как если бы они были локальными. В зависимости от реализации клиента IMAP и почтовой архитектуры, требуемой системным менеджером, пользователь может сохранять сообщения непосредственно на клиентской машине или сохранять их на сервере, или им предоставляется выбор.

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

Когда POP получает сообщение, он получает все его части, тогда как протокол IMAP4 позволяет клиентам извлекать любую из частей MIME отдельно - например, для получения простого текста без получения прикрепленных файлов.

IMAP поддерживает флаги на сервере, чтобы отслеживать состояние сообщения: например, было ли прочитано сообщение, предоставлен ли ответ, удалено ли письмо.

Что такое POP и IMAP и какой из них следует использовать для электронной почты?

Если вы когда-либо настраивали почтовый клиент или приложение, вы наверняка сталкивались с условиями портов POP3, SMTP и IMAP. Вы помните, какой из них вы выбрали и почему? Если вы не совсем уверены, что означают эти условия и как каждый влияет на вашу учетную запись электронной почты, то информация ниже прольет некоторый свет на этот вопрос. В статье объясняется, как работают POP и IMAP, и поможет вам решить, какой из них лучше всего соответствует вашим потребностям.

Исходным протоколом является POP. Он был создан в 1984 году как средство для загрузки электронных писем с удаленного сервера. IMAP был разработан в 1986 году для обеспечения удаленного доступа к электронным письмам, хранящимся на удаленном сервере. По сути, основное отличие двух протоколов заключается в том, что POP загружает электронные письма с сервера для постоянного локального хранилища, в то время как IMAP оставляет их на сервере и просто кэширует (временно хранит) письма локально. Другими словами, IMAP — это форма облачного хранилища.

Отличительные особенности POP и IMAP?

Эти два протокола лучше всего сравнивать, рассматривая их основные рабочие процессы.

Рабочий процесс POP:

  • подключение к серверу;
  • получение почты;
  • локальное хранение данных;
  • удаление корреспонденции с сервера;
  • отключение.

Поведение POP по умолчанию — это удаление почты с сервера. Однако большинство клиентов также предоставляют возможность оставить копию загруженной почты на сервере.

По умолчанию порты POP3:

  • порт 110 - незашифрованный порт;
  • порт 995 - порт SSL / TLS, также известный как POP3S.

Рабочий процесс IMAP:

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

Как вы можете видеть, рабочий процесс IMAP немного сложнее, чем POP. По сути, структуры папок и электронные письма хранятся на сервере, и только копии - локально. Как правило, эти локальные копии хранятся временно. Тем не менее, доступно хранение их на постоянной основе.

По умолчанию порты IMAP:

  • порт 143 - незашифрованный порт;
  • порт 993 - порт SSL / TLS, также известный как IMAPS.

Каковы преимущества POP?

Будучи исходным протоколом, POP следует упрощенной идее, что только один клиент требует доступа к почте на сервере и что письма лучше всего хранятся локально. Это приводит к следующим преимуществам:

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

В чем преимущества IMAP?

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

В результате IMAP имеет следующие преимущества:

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

Какой протокол электронной почты является лучшим?

Выбор протокола зависит от ваших конкретных потребностей и текущей рабочей ситуации. Нижеследующие пункты должны помочь принять окончательное решение.

Выберите POP, если:

  • Вы хотите получить доступ к своей почте только с одного устройства.
  • Вам необходим постоянный доступ к вашей электронной почте, независимо от доступности Интернета.
  • У вас ограниченное хранение на сервере.

Выберите IMAP, если:

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

Если у вас есть сомнения, обратитесь к IMAP. Это более современный протокол, который позволяет вам быть гибким, и ваша электронная почта автоматически резервируется на сервере. Кроме того, серверное пространство обычно не является проблемой в наши дни, и вы все равно сможете хранить важные электронные письма локально.

Ошибки почтового клиента

Если вы сталкиваетесь с ошибкой POP3, порт: 995, Secure (SSL) с номером 0x800C0133 при попытке проверить свой Gmail, то попробуйте сжать свои почтовые папки. В POP-клиенте выберите «Файл» > «Папка» > «Сжать все папки». Это должно устранить проблему.

В этой статье поговорим об отличии двух почтовых протоколов – POP и IMAP – и о том, как их можно связать друг с другом.

Мотивирующая картинка J

Почтовый протокол POP 3 используется только для загрузки новых сообщений с почтового сервера. Он позволяет почтовому клиенту подключиться к серверу лишь на период времени, который требуется для загрузки сообщений.
Не допускается одновременное подключение нескольких почтовых клиентов к определенному ящику (разрешено только одно подключение).

При использовании почтового протокола IMAP соединение не разрывается до тех пор, пока ведется работа с ящиком в почтовой программе; загрузка сообщений с сервера производится только по запросу почтового клиента.
Разрешен одновременный доступ нескольких почтовых клиентов к ящику, причем каждый из них может отслеживать изменения, производимые другими подключенными клиентами, а также статус всех сообщений (прочитано, отправлен ответ, удалено).

Оба эти протокола выполняют идентичные задачи по работе с почтой, только Pop 3 позволяет скачивать все файлы одновременно, а IMAP – сначала список файлов, а затем по необходимости сами файлы.

Одна из частых проблем при использовании протоколов Pop 3 и IMAP , заключается в том, что многие разработчики пробуют реализовать эти протоколы под один интерфейс и с одинаковой логикой. Это в корне неверно. Дело в том, что при использовании протокола IMAP мы можем грузить не все письма, а только непрочитанные для примера. Для того чтобы реализовать передачу данных, мы использовали в проекте библиотеку MailBee . NET . Пример реализации приема с помощью этой библиотеки вы можете посмотреть . В примере по ссылке выше приведена реализация протокола POP 3 и IMAP с использованием паттерна фабричный метод ( Factory Method ). В одной из таких реализаций мы использовали для уникальности письма UID (уникальный идентификатор письма на сервере). Дело в том, что для IMAP и POP 3 эти идентификаторы разные.

RFC 1939 (POP3): The unique-id of a message is an arbitrary server-determined string, consisting of one to 70 characters in the range 0x21 to 0x7E, which uniquely identifies a message within a maildrop and which persists across sessions.

RFC 3501 (IMAP): (Unique Identifier (UID) Message Attribute is) a 32-bit value assigned to each message, which when used with the unique identifier validity value (see below) forms a 64-bit value that MUST NOT refer to any other message in the mailbox or any subsequent mailbox with the same name forever.

Давайте посмотрим примеры отличия UIDs . Примеры отличия для POP 3:

pop . meta . ua UID 8863-1253275464

pop3.ukr.net 1356790973352505619

Пример UIDs для IMAP:

imap.ukr.net 1432

Теоретически можно написать почтовый сервер, который поддерживает как IMAP, так и POP 3, и использовать тот же UID для обоих протоколов, но я не знаю ни одного сервера, который будет на самом деле сделать это. На практике вы должны относиться к POP 3-идентификаторам и IMAP- идентификаторам как несвязанным значениям . Вроде, все логично, но что делать, если мы работали с одним ящиком, который поддерживает и POP 3 и IMAP . И вы в своей программе даете возможность указать пользователю, какой протокол для получения почты он хочет использовать. Если мы использовали, например, pop 3. ukr . net , а затем решили переключиться на использование imap . ukr . net , то мы получим кучу проблем на свою голову. Потому что если посмотреть выше пример по отличию в UID для этих двух протоколов для ukr . net , то увидим основную проблему. А именно: дублирование некоторых писем. Если пользователю не важен факт загрузки писем на свой диск, то этим фактом можно пренебречь, но если факт доставки почты является существенным, этот факт нельзя игнорировать. Поэтому многие разработчики реализуют работу с протоколом IMAP как с протоколом POP 3.

Как же можно "подружить" эти два протокола? После долгих размышлений с коллегами на работе и безуспешного поиска в интернете решений связывания писем, которые получены через протокол POP 3, с письмами, которые получены через протокол IMAP , мы пришли к решению, как можно победить связывание писем, если у них присутствуют вложения. Первым делом нам необходимо завести базу для хранения идентификатора настроек почты (Например, ссылка на таблицу настроек почты, в которой хранятся адрес, порт, пароль и т.д.), уникальный идентификатор сообщения UID и дата получения письма. Этот способ поможет нам идентифицировать сообщения, полученные от конкретного почтового сервера для конкретного пользователя.

Следующим шагом нам необходимо создать таблицудля хранения хеш-файлов, которые идут в письме ( attachment ). Для того чтобы посчитать хеш, можем воспользоваться стандартными способами, доступными в. NET Framework . Например, чтобы использовать MD 5, воспользуемся классом MD 5 CryptoServiceProvider () или другим хеш-алгоритмом из доступных HashAlgorithm на MSDN , или, по желанию, можно написать свой алгоритм. Основная суть заключается в том, что если вы храните у себя вложения, которые идут в письмах, вы можете хранить только те, которые не дублируются. Как это работает: вы загрузили письмо из сервера, посчитали его хеш, проверили, есть ли такой в таблице хешей, если такого файла нет в данной таблице, мы сохраняем посчитанный хеш для данного файла в БД, чтобы при переключении протокола не грузить этот файл повторно. После этого если мы используем протокол IMAP , можем уведомить сервер о том, что это письмо мы прочитали, и при последующем запросе он не будет нам его возвращать.

Огромный минус данного подхода − необходимость загрузки полученных писем целиком, это может занять продолжительное время, в зависимости от пропускной способности интернет-канала. В таком случае мы выравниваем протокол POP 3 с IMAP и можем использовать лишь малую часть из возможностей, которые предоставляет нам современный протокол IMAP . Но мы справляемся с проблемой хранения дубликатов. Если у вас есть возможность не рассматривать переключение с POP 3 на IMAP в рамках одного почтового ящика, вас эта проблема не коснется. Вы сможете использовать всю мощь протокола IMAP , а для отдельных случаев оставить POP 3 таким, каким он есть.


Примечание: некоторые разработчики могут подумать, почему для таких целей не разрулить по дате получения DataReceived . В библиотеке MailBee . Net в классе MailMessage , который хранит информацию о письме, есть поле DateReceived , которое содержит дату получения письма на почту MailMessage.DateReceived Property . Но с этим полем есть проблема: оно не подходит для протокола IMAP . Для IMAP необходимо использовать свойство Envelope.DateReceived Property , но если информация не доступна по какой то причине, то оба эти свойства с DateReceived будет содержаться MinValue . Поэтому даже если у нас поде DateReceived не равно минимальной дате, не факт, что после смены протокола с POP 3 на IMAP эта дата будет идентична. Одна из проблем, которая была раньше с MailBee . NET , – что дата DateReceived отличалась на один час от реального времени Incorrect Date Received Time . Поэтому еще раз хотелось бы вам посоветовать, что если есть возможность рассматривать эти два протокола как отдельные уникальные протоколы, то у вас станет на одну проблему меньше. В противном случае вам придется связывать эти два протокола, что чревато "костылями", которые если и будут работать, то с огромной натяжкой.