Транзакции pop3. Отличие IMAP от POP3 протокола. По каким протоколам происходит обмен электронной почтой? Понятия и термины

В данном уроке мы рассмотрим еще один протокол электронной почты, по которому почтовые клиенты «общаются» с почтовыми серверами.

Не думаю, что Вы будете устанавливать у себя локального почтового клиента. Но, именно на примере локального почтового клиента, проще понять, что собой представляют почтовые протоколы и, в частности, протокол POP3.

Сразу хочу оговориться, что мы с Вами рассматриваем протоколы приема (извлечения) электронной почты с почтовых серверов IMAP (имап, ай-мэп) и POP3 (поп три). Но не рассматриваем (пока) протокол передачи электронной почты на почтовые сервера SMTP (эс-эм-ти-пи).

Хотя ничего особенного в протоколе SMTP нет, чуть позже вкратце мы коснемся и его.

Итак, настройка приема электронной почты по протоколу POP3.

Ничего нового изобретать не будем, а просто создадим еще одну учетную запись для нашего тестового адреса [email protected].

Для этого запускаем нашу программу клиента электронной почты, щелкаем левой кнопкой мыши по «имени» нашей единственной учетной записи «[email protected]», а затем опять левой кнопкой мыши по пункту меню создания учетной записи электронной почты.

В следующем окне заполняем поля точно так же, как мы заполняли эти поля при настройке учетной записи по протоколу IMAP. Затем щелкаем по кнопе «Продолжить».

В следующем окне нам предлагают выбор, по какому протоколу мы будем «забирать» свою почту с почтового сервера. Щелкаем левой кнопкой мыши сначала по кнопке выбора «POP3», а затем опять левой кнопкой мыши по кнопке «Готово».

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

Папка «Входящие» пока пустая, так как клиент проверяет почту на сервере 1 раз в 10 минут. Ждать 10 минут мы не будем и проверим почту на почтовом сервере немедленно. Для этого нажмем кнопку пункта меню «Получить».

Вот здесь мы и начнем рассматривать принцип работы почты по протоколу POP3.

Почта с почтового сервера полностью «скачивается» на Ваш персональный компьютер. Другими словами копируется на Ваш компьютер в полном объеме.

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

Но, прежде чем мы продолжим, давайте поменяем имя учетной записи электронной почты, созданной для работы с почтовым сервером по протоколу POP3.

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

В общем, чтобы не запутаться, меняем имя «учётки».

Для этого наводим указатель мыши на имя нашей учетной записи «[email protected]» и щелкаем по ней левой кнопкой мыши. Аналогично щелкаем по пункту меню настройки учетной записи «Просмотр параметров этой учетной записи».

У нас откроется окно настроек для наших учетных записей. Меняем имя нашей «учётки». Чтобы ничего не выдумывать, я просто допишу «(pop3 )».

Теперь легче ориентироваться в наших учетных записях.

Давайте будем считать, что мы уже просмотрели всю электронную почту и она нам больше не нужна. И решили мы удалить все письма сразу. Для этого щелкаем левой кнопкой мыши по любому письму. Комбинацией клавиш «Ctrl+A» выделяем сразу все письма и нажимаем клавишу «Del» для удаления.

Вся почта удалилась и была перемещена из папки «Входящие» в папку «Удаленные».

А теперь ВНИМАНИЕ!!! Два момента.

Теперь, пока не придет новое письмо, папка «Входящие» будет пустой. Это, вроде, само собой разумеется. Но!

Давайте посмотрим, что реально твориться с нашей почтой на почтовом сервере, которую мы у себя удалили. Посмотрим через учетную запись, настроенную на протокол IMAP и через .

Вся удаленная почта осталась на почтовом сервере. Хотя больше мы ее не получаем. Хорошо это или плохо?

Здесь, скорее больше минусов, чем плюсов. Хотя кому как.

Один из «длинных» минусов это то, что объем писем со временем будет нарастать и может полностью забить почтовый ящик. Письма просто перестанут приходить.

Один из «больших» плюсов это то, что даже если мы полностью удалим свою почту на локальном компьютере, мы всегда будем знать, что у нас есть как бы «резервная копия» всех наших писем

Давайте теперь изменим один параметр у сервера.

Для этого войдем в просмотр параметров учетной записи.

Щелкаем левой кнопкой мыши по имени учетной записи «[email protected] (pop3)», затем по пункту «Просмотр параметров учетной записи», затем по пункту «Параметры сервера».

Убираем галочку напротив «Оставлять копии сообщений на сервере». Нажимаем кнопку «ОК».

Теперь давайте посмотрим, что с нашей почтой на почтовом сервере в нашем почтовом ящике.

Как мы видим, вся почта была удалена сразу после того, как мы убрали галочку напротив параметра "Оставлять копии сообщений на сервере".

Хорошо это или плохо?

Здесь есть очень большой плюс. Вам нет необходимости беспокоиться о своем почтовом ящике на сервере. Он просто никогда не переполнится, и письма будут приходить всегда.

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

Но, с другой стороны, если нет резервной копии чего-то, то это самое «чего-то» уже не восстановишь. Причем не важно, что это — почта, фотографии, документы и т.п.

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

Но и конечно, никто никогда не создает две учетные записи для одного и того же адреса электронной почты. Хотя, как Вы видите, возможность такая существует. И сделал я две записи только для наглядного примера.

Вот в принципе и все про протоколы IMAP и POP3.

В следующем уроке мы узнаем как «привязывать» электронную почту, работая с почтовым ящиком через Вэб-интерфейс. А также рассмотрим несколько различных способов вставки картинок.

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

На этом на сегодня все. Всем удачи и творческих успехов. 🙂

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 . Поэтому еще раз хотелось бы вам посоветовать, что если есть возможность рассматривать эти два протокола как отдельные уникальные протоколы, то у вас станет на одну проблему меньше. В противном случае вам придется связывать эти два протокола, что чревато "костылями", которые если и будут работать, то с огромной натяжкой.

Post Office Protocol (POP) - протокол доставки почты пользователю из почтового ящика почтового сервера РОР . Многие концепции, принципы и понятия протокола POP выглядят и функционируют подобно SMTP. Команды POP практически идентичны командам SMTP, отличаясь в некоторых деталях. На рис.7 изображена модель клиент-сервер по протоколу POP. Сервер POP находится между агентом пользователя и почтовыми ящиками.

В настоящее время существуют две версии протокола POP - РОР2 и РОРЗ, обладающими примерно одинаковыми возможностями, однако несовместимыми друг с другом. Дело в том, что у РОР2 и РОРЗ разные номера портов протокола. Между ними отсутствует связь, аналогичная связи между SMTP и ESMTP. Протокол РОРЗ не является расширением или модификацией РОР2 - это совершенно другой протокол. РОР2 определен в документе RFC 937 (Post Office Protocol-Version 2, Butler, et al, 1985), a РОРЗ - в RFC 1225 (Post Office Protocol-Version 3, Rose, 1991). Далее кратко рассмотрим POP вообще и более подробно - РОРЗ. PОРЗ разработан с учетом специфики доставки почты на персональные компьютеры и имеет соответствующие операции для этого.

Назначение протокола РОРЗ

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

Описание протокола РОРЗ

Конструкция протокола РОРЗ обеспечивает возможность пользователю обратиться к своему почтовому серверу и изъять накопившуюся для него почту. Пользователь может получить доступ к РОР-серверу из любой точки доступа к Интернет. При этом он должен запустить специальный почтовый агент (UA), работающий по протоколу РОРЗ, и настроить его для работы со своим почтовым сервером. Итак, во главе модели POP находится отдельный персональный компьютер, работающий исключительно в качестве клиента почтовой системы (сервера). Подчеркнем также, что сообщения доставляются клиенту по протоколу POP, а посылаются по-прежнему при помощи SMTP. То есть на компьютере пользователя существуют два отдельных агента-интерфейса к почтовой системе - доставки (POP) и отправки (SMTP). Разработчики протокола РОРЗ называет такую ситуацию "раздельные агенты" (split UA). Концепция раздельных агентов кратко обсуждается в спецификации РОРЗ.

В протоколе РОРЗ оговорены три стадии процесса получения почты: авторизация, транзакция и обновление. После того как сервер и клиент РОРЗ установили соединение, начинается стадия авторизации. На стадии авторизации клиент идентифицирует себя для сервера. Если авторизация прошла успешно, сервер открывает почтовый ящик клиента и начинается стадия транзакции. В ней клиент либо запрашивает у сервера информацию (например, список почтовых сообщений), либо просит его совершить определенное действие (например, выдать почтовое сообщение). Наконец, на стадии обновления сеанс связи заканчивается. В табл.7 перечислены команды протокола РОРЗ, обязательные для работающей в Интернет реализации минимальной конфигурации.

Таблица 5. Команды протокола POP версии 3 (для минимальной конфигурации)

Описание

USER

Идентифицирует пользователя с указанным именем

Указывает пароль для пары клиент-сервер

Закрывает TCP-соединение

Сервер возвращает количество сообщений в почтовом ящике плюс размер почтового ящика

Сервер возвращает идентификаторы сообщений вместе с размерами сообщений (параметром команды может быть идентификатор сообщения)

Извлекает сообщение из почтового ящика (требуется указывать аргумент-идентификатор сообщения)

Отмечает сообщение для удаления (требуется указывать аргумент - идентификатор сообщения)

Сервер возвращает положительный ответ, но не совершает никаких действий

Сервер возвращает наибольший номер сообщения из тех, к которым ранее уже обращались

Отменяет удаление сообщения, отмеченного ранее командой DELE

В протоколе РОРЗ определено несколько команд, но на них дается только два ответа: +ОК (позитивный, аналогичен сообщению-подтверждению АСK) и -ERR (негативный, аналогичен сообщению "не подтверждено" NAK). Оба ответа подтверждают, что обращение к серверу произошло и что он вообще отвечает на команды. Как правило, за каждым ответом следует его содержательное словесное описание. В RFC 1225 есть образцы нескольких типичных сеансов РОРЗ. Сейчас мы рассмотрим несколько из них, что даст возможность уловить последовательность команд в обмене между сервером и клиентом.

Авторизация пользователя

После того как программа установила TCP-соединение с портом протокола РОРЗ (официальный номер 110), необходимо послать команду USER с именем пользователя в качестве параметра. Если ответ сервера будет +ОК, нужно послать команду PASS с паролем этого пользователя:

CLIENT: USER kcope ERVER: +ОК CLIENT: PASS secret SERVER: +ОК kcope"s maildrop has 2 messages (320 octets) (В почтовом ящике kcope есть 2 сообщения (320 байтов) ...)

Транзакции РОРЗ

Команда STAT возвращает количество сообщений и количество байтов в сообщениях:

CLIENT: STAT
SERVER: +ОК 2 320

Команда LIST (без параметра) возвращает список сообщений в почтовом ящике и их размеры:

CLIENT: LIST SERVER: +ОК 2 messages (320 octets) SERVER: 1 120 SERVER: 2 200 SERVER: . ...

Команда LIST с параметром возвращает информацию о заданном сообщении:

CLIENT: LIST 2 SERVER: +ОК 2 200 ... CLIENT: LIST 3 SERVER: -ERR no such message, only 2 messages in maildrop

Команда TOP возвращает заголовок, пустую строку и первые десять строк тела сообщения:

CLIENT: TOP 10 SERVER: +ОК SERVER: (сервер POP высылает заголовки сообщений, пустую строку и первые десять строк тела сообщения) SERVER: . ... CLIENT: TOP 100 SERVER: -ERR no such message

Команда NOOP не возвращает никакой полезной информации, за исключением позитивного ответа сервера. Однако позитивный ответ означает, что сервер находится в соединении с клиентом и ждет запросов:

CLIENT: NOOP
SERVER: +ОК

Следующие примеры показывают, как сервер POP3 выполняет действия. Например, команда RETR извлекает сообщение с указанным номером и помещает его в буфер местного UA:

CLIENT: RETR 1 SERVER: +OK 120 octets SERVER: (РОРЗ-сервер высылает сообщение целиком) SERVER: . . . . . .

Команда DELE отмечает сообщение, которое нужно удалить:

SERVER: +OK message 1 deleted ... (сообщение 1 удалено) CLIENT: DELE 2 SERVER: -ERR message 2 already deleted сообщение 2 уже удалено)

Команда RSET снимает метки удаления со всех отмеченных ранее сообщений:

CLIENT: RSET
SERVER: +OK maildrop has 2 messages (320 octets)
(в почтовом ящике 2 сообщения (320 байтов))

Как и следовало ожидать, команда QUIT закрывает соединение с сервером:

CLIENT: QUIT SERVER: +OK dewey POP3 server signing off CLIENT: QUIT SERVER: +OK dewey POP3 server signing off (maildrop empty) CLIENT: QUIT SERVER: +OK dewey POP3 server signing off (2 messages left)

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

21.04.05 7.7K

Базовые операции

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

Определенные ответы могут быть многострочными. В этом случае, после первой строки ответа заканчивающейся CRLF, каждая дополнительно посланная строка заканчивается парой CRLF. После того как все строки ответа посланы, последняя строка будет заканчиваться завершающим октетом — символом. («.», десятичный код 46) и парой CRLF. POP3 сессия состоит из нескольких стадий. После установки TCP соединения, сервер посылает приветствие и сессия переходит в состояние AUTHORIZATION. На этом этапе клиент должен идентифицировать себя на сервере. После успешной идентификации сессия переходит в состояние TRANSACTION. В этой стадии клиент запрашивает выполнение команд на сервере. Когда клиент посылает команду QUIT сессия переходит в состояние UPDATE. На этом этапе POP3 сервер освобождает все ресурсы занятые в стадии TRANSACTION и заканчивает работу. TCP соединение после этого закрывается. POP3 сервер МОЖЕТ иметь inactivity autologout таймер (таймер авто-завершения сессии при бездействии). Такой таймер ДОЛЖЕН быть установлен как минимум на 10 минут. Если клиент не передает серверу команды заданный интервал времени, то сервер разрывает TCP соединение без перехода в состояние UPDATE, т.е. без удаления сообщений и посылки каких либо ответов клиенту.

Состояние AUTHORIZATION

После открытия клиентом TCP соединения, сервер посылает однострочное приветствие. Строка должна заканчиваться CRLF.
Пример:

S: +OK POP3 server ready

Примечание:
В качестве приветствия POP3 сервер должен всегда посылать положительный ответ.

Теперь сессия находится в состоянии AUTHORIZATION. Клиент должен идентифицировать себя на сервере. В данном документе описано два способа, комбинация команд USER и PASS и команда APOP. Для идентификации с помощью команд USER и PASS, клиент должен сначала послать команду USER. Если сервер ответил положительным индикатором состояния (+OK), то клиент должен послать команду PASS чтобы закончить авторизацию или послать команду QUIT для завершения сессии. Если сервер отправил отрицательный ответ (-ERR) на команду USER, то можно повторить авторизацию или закончить сессию командой QUIT.
После получения команды PASS, сервер использует пару аргументов USER и PASS для определения доступа к почтовому ящику.
Как только сервер определил с помощью какой либо команды идентификации, что клиенту нужно дать доступ к соответствующему почтовому ящику, POP3 сервер получает монопольный доступ к почтовому ящику, чтобы предотвратить изменение или удаление сообщений до состояния UPDATE. Если блокировка прошла успешно, сервер посылает положительный ответ и строку приветствия. Теперь сессия переходит в состояние TRANSACTION без сообщений помеченных как удаленные. Если почтовый ящик не может быть открыт по каким либо причинам (например, не может быть выполнена блокировка или клиенту отказано в доступе к соответствующему почтовому ящику), сервер отвечает отрицательным индикатором состояния. После отрицательного ответа сервер может закрыть соединение. Если сервер не закрыл соединение, клиент может послать новую команду идентификации и начать все заново или послать команду QUIT.
После того как сервер открыл почтовый ящик, он присваивает номер каждому сообщению и отмечает размер сообщения в октетах. Первое сообщение будет иметь номер 1, следующее – номер 2 и так далее. В POP3 командах все числа представлены в десятичной системе.

Вот резюме по трем командам рассмотренным к настоящему времени:

USER имя

Аргументы:
Строка идентификации почтового ящика (обязательный).

Ограничения:
Может быть передана только в состоянии AUTHORIZATION после POP3 приветствия или неуспешной команды USER или PASS.

Возможные ответы:

OK name is a valid mailbox -ERR never heard of mailbox name

PASS строка

Аргументы:
пароль к почтовому ящику (обязательный).

Ограничения:
Может быть передана только в состоянии AUTHORIZATION после успешной команды USER.

Подробности:
Команда PASS имеет только один аргумент, сервер может трактовать пробел в параметре как часть пароля, вместо разделителя аргументов.

Возможные ответы:

OK maildrop locked and ready -ERR invalid password -ERR unable to lock maildrop

C: USER mrose S: +OK mrose is a real hoopy frood C: PASS secret S: +OK mrose"s maildrop has 2 messages (320 octets) ... C: USER mrose S: +OK mrose is a real hoopy frood C: PASS secret S: -ERR maildrop already locked

QUIT

Аргументы:
нет

Ограничения:
нет

Возможные ответы:

C: QUIT S: +OK dewey POP3 server signing off

Состояние TRANSACTION

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

STAT

Аргументы:
нет

Ограничения:

Подробности:
POP3 сервер отправляет положительный ответ со строкой содержащей информация о почтовом ящике. Эта строка называется «drop listing». Для легкого разбора, POP3 сервера использую определенный формат для «drop listing». Положительный ответ включает в себя: индикатор состояния (+OK), дальше следуют число сообщений и размер сообщений в октетах, разделенные одиночным пробелом. Сообщения, помеченные как удаленные, не учитываются.

Возможные ответы:

C: STAT S: +OK 2 320

LIST сообщение

Аргументы:
Номер сообщения (необязательный), сообщения, помеченные как удаленные, не учитываются.

Ограничения:
Может быть передана только в состоянии TRANSACTION.

Подробности:
Если задан аргумент, сервер передает положительный ответ со строкой информации для заданного сообщения. Такая строка называется «scan listing». Если аргумент не задан и то сервер посылает многострочный ответ. После индикатора состояния (+OK), для каждого сообщения в почтовом ящике, POP3 сервер посылает строку содержащую информацию для данного сообщения. Эта строка называется “scan listing”. Все POP3 сервера используют определенный формат для “scan listing”. “scan listing” состоит из номера сообщения после которого, через одиночный пробел следует точный размер сообщения в октетах. Данный документ не указывает что должно следовать за размером сообщения, единственное требование чтобы ответ заканчивался парой CRLF. Различные расширения могут включать дополнительную информацию.

Возможные ответы:

OK scan listing follows -ERR no such message

C: LIST S: +OK 2 messages (320 octets) S: 1 120 S: 2 200 S: . ... C: LIST 2 S: +OK 2 200 ... C: LIST 3 S: -ERR no such message, only 2 messages in maildrop

RETR сообщение

Аргументы:

Ограничения:
Может быть передана только в состоянии TRANSACTION.

Подробности:
При положительном ответе, после положительного индикатора состояния сервер передает многострочный ответ, содержащий заданное сообщение.

Возможные ответы:

OK message follows -ERR no such message

DELE сообщение

Аргументы:
Номер сообщения (обязательный), сообщения, помеченные как удаленные, не учитываются.

Ограничения:
Может быть передана только в состоянии TRANSACTION.

Подробности:
POP3 сервер помечает сообщение как удаленное. Все последующие обращения к этому сообщению будут вызывать ошибку. Фактически сервер не удаляет сообщение, пока не наступит состояние UPDATE.

Возможные ответы:

OK message deleted -ERR no such message

C: DELE 1 S: +OK message 1 deleted ... C: DELE 2 S: -ERR message 2 already deleted

NOOP

Аргументы:
Нет.

Ограничения:
Может быть передана только в состоянии TRANSACTION.

Подробности:
Сервер ничего не делает и отвечает только положительно.

Возможные ответы:

RSET

Аргументы:
Нет.

Ограничения:
Может быть передана только в состоянии TRANSACTION.

Подробности:
Если сообщение было помечено как удаленное, то сервер снимает эту отметку. Ответ всегда положительный.
Возможные ответы:

Состояние UPDATE

Когда клиент посылает команду QUIT в состоянии TRANSACTION, сервер переходит на стадию UPDATE (Обратите внимание, что если клиент посылает команду в состоянии AUTHORIZATION, то сервер завершает сессию и не входит в стадию UPDATE). Если сессия завершается по каким-либо другим причинам, без посылки команды QUIT, POP3 сессия не входит в стадию UPDATE и ни одно сообщение из почтового ящика не должно быть удаленно.

QUIT

Аргументы:
Нет.

Ограничения:
Нет.

Подробности:
Сервер удаляет все сообщения помеченные как удаленные. Посылается ответ. TCP соединение закрывается.

Возможные ответы:

C: QUIT S: +OK dewey POP3 server signing off (maildrop empty) ... C: QUIT S: +OK dewey POP3 server signing off (2 messages left) ...

Необязательные команды

POP3 команды, описанные выше должны поддерживаться всеми POP3 серверами. Дополнительные команды дают клиенту большую свободу в обработке сообщений. Примечание: этот документ поощряет поддержку дополнительных команд, вместо внесений дополнительных сведений в “drop listing” и “scan listing”.

TOP сообщение n

Аргументы:
Номер сообщения (обязательный) и неотрицательное число, указывающее на количество строк тела сообщения которое сервер передаст клиенту, аргумент обязательный. Нельзя обращаться к сообщениям помеченным как удаленные.

Ограничения:
Может быть передана только в состоянии TRANSACTION.

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

Примечание:
Если число строк, которые требует клиент, больше числа строк в сообщение, то сервер передает все сообщение полностью.

Возможные ответы:

OK top of message follows -ERR no such message

C: TOP 1 10 S: +OK S: S: . ... C: TOP 100 3 S: -ERR no such message

UIDL сообщение

Аргументы:
Номер сообщения (необязательный). Нельзя обратиться к сообщению помеченному как удаленное.

Ограничения:
Может быть передана только в состоянии TRANSACTION.

Подробности:
Если аргумент задан, сервер посылает положительный ответ со строкой содержащей информацию о заданном сообщении. Эта строка называется «unique-id listing».
Если аргумент не задан, то при положительном ответе сервер посылает многострочный ответ. После индикатора состояния (+OK), и строку содержащую информацию о сообщении.
Для упрощения синтаксического разбора все сервера должны использовать определенный формат «unique-id listing”. «unique-id listing” состоит из номера сообщения и уникального идентификатора разделенные одиночным пробелом. За уникальным идентификатором не должно следовать ни какой дополнительной информации.
Уникальный идентификатор это произвольная, определяемая сервером, строка, содержащая символы в диапазоне от 0x21 до 0x7E, которая однозначно идентифицирует сообщение в пределах почтового ящика. Идентификатор сохраняется на все время сессии. Сервер не должен многократно использовать идентификатор для данного почтового ящика, пока существует объект использующий его. Сообщения помеченные как удаленные не учитываются.

Возможные ответы:

OK unique-id listing follows -ERR no such message

C: UIDL S: +OK S: 1 whqtswO00WBw418f9t5JxYwZ S: 2 QhdPYR:00WBw1Ph7x7 S: . ... C: UIDL 2 S: +OK 2 QhdPYR:00WBw1Ph7x7 ... C: UIDL 3 S: -ERR no such message, only 2 messages in maildrop

APOP имя digest (шифрованная строка пароля)

Аргументы: Строка идентифицирующая почтовый ящик и MD5 digest (шифрованная (по алгоритму MD5) строка пароля), оба параметра обязательные.

Данный раздел находится в стадии доработки…

Резюме по командам POP3

Основные команды:

USER имя PASS строка QUIT STAT LIST сообщение RETR сообщение DELE сообщение NOOP RSET QUIT

Дополнительные команды:

APOP имя digest TOP сообщение номер UIDL сообщение

Обратите внимание что на все команды за исключением STAT, LIST и UIDL, ответ, данный сервером важно только +OK и -ERR. Любой текст встречающийся после этого ответа может игнорироваться клиентом.

Пример POP3 сессии

S: wait for connection on TCP port 110 C: open connection S: +OK POP3 server ready <[email protected]> C: APOP mrose S: +OK mrose"s maildrop has 2 messages (320 octets) C: STAT S: +OK 2 320 C: LIST S: +OK 2 messages (320 octets) S: 1 120 S: 2 200 S: . C: RETR 1 S: +OK 120 octets S: S: . C: DELE 1 S: +OK message 1 deleted C: RETR 2 S: +OK 200 octets S: S: . C: DELE 2 S: +OK message 2 deleted C: QUIT S: +OK dewey POP3 server signing off (maildrop empty) C: close connection S: wait for next connection

Хорошо Плохо