Почтовые протоколы POP3 и IMAP. Самое интересное про SMTP, POP3 и IMAP

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

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

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

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

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

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

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

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

RSET
Отменяет удаление сообщения, отмеченного ранее командой 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 отмечает сообщение, которое нужно удалить:

CLIENT: DELE 1
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, и все отмеченные для удаления сообщения будут восстановлены.

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 , и все отмеченные для удаления сообщения будут восстановлены.

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

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

Протокол POP3 (Post Office Protocol — version 3, третья версия протокола почтового отделения) является наиболее распространенным протоколом получения электронной почты с почтового сервера. Для этих целей также используется IMAP. В IMAP предусмотрено больше возможностей, чем в POP3, но зато POP3 намного проще. Для сравнения — POP3 описан в RFC1939 , занимающем всего 20 страниц, а RFC3501 , описывающий IMAP, состоит из целых 108 страниц. В этом посте речь пойдет о протоколе POP3.

Как всегда, начнем с запуска утилиты telnet и живого примера:

telnet mail.nic.ru 110
Trying 194.85.88.226...
Connected to mail.nic.ru.
Escape character is "^]".
+OK POP3 Server ready <[email protected]>
APOP [email protected]

Здесь мы соединяемся с pop3-сервером, работающим обычно на 110-м порту и проходим аутентификацию (не путать с авторизацией). Если в приветствии сервера присутствует похожая на e-mail строка в треугольных скобках (timestamp), значит сервер поддерживает команду APOP, позволяющую передавать пароль в зашифрованном (точнее — хэшированном) виде. В этом примере хэш вычислен следующим образом:

echo -n "<[email protected]>qwerty" | md5

То есть происходит конкатенация timestamp с паролем, а от результата вычисляется MD5. Преимущество этого метода в том, что даже при использовании незащищенного соединения злоумышленник не сможет перехватить пароль. Он увидит только хэш, который будет совершенно бесполезен, поскольку для каждого нового соединения сервер использует уникальный timestamp. Чтобы узнать пароль необходимо взломать хэш c помощью перебора, что практически бесполезно для достаточно сильных паролей, которые к тому же меняются хотя бы раз в пол года.

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

Потому большинством почтовых сервером (я лично проверил pop3.mail.ru:110 и pop.gmail.com:995/ssl/) команда APOP не поддерживается и проходить аутентификацию приходится с помощью стандартной пары логин:пароль.

USER [email protected]
+OK please send the PASS
PASS qwerty
+OK 5 messages (868540 bytes) (proxing)

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

Итак, аутентификация пройдена, теперь можно выполнить несколько команд. Начнем с нескольких довольно бесполезных команд:

HELP
+OK Valid commands: QUIT, NOOP, STAT, LIST, UIDL, DELE, RSET, RETR, ...
NOOP
+OK cool
LAST
+OK 5 is last seen

Команда HELP позволяет получить список поддерживаемых сервером команд. В этом примере команды UIDL, XTND и XMIT являются расширениями протокола POP3 и сервер не обязан их поддерживать. Команда UIDL позволяет получить уникальные идентификаторы сообщений (см описание команды LIST ниже):

UIDL
+OK 6 messages
1 3876
2 3877
3 3878
4 3879
5 3880
6 3881
.
UIDL 2
+OK 2 3877

Для чего нужны XTND и XMIT не знаю и разбираться лениво:) Желающие могут поискать ответ в Google.

Команда NOOP означает «ничего не делать». На ум приходит только одно ее применение — выполнять команду раз в 15 секунд, чтобы дать понять серверу, что клиент не повис.

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

Теперь перейдем к более полезным командам:

STAT
+OK 5 868540
LIST
+OK 5 messages
1 275368
2 11196
3 153304
4 275367
5 153305
.
LIST 2
+OK 2 11196
TOP 2 0
+OK message follows
Return-Path:
X-Blacklisted-By: cbl.abuseat.org
From: "=?koi8-r?B?48XO1NIg7cnH0sHDyck=?="
To: [email protected]
Subject: =?koi8-r?B?SGVsbG8=?=
Date: Thu, 17 Dec 2009 18:18:12 +0300
MIME-Version: 1.0
Content-Type: multipart/related;
type="multipart/alternative";
boundary="----=_NextPart_000_003C_01CA7F45.01CA7F45"
X-Priority: 3
X-MSMail-Priority: Normal
X-Mailer: Microsoft Outlook Express 6.00.3790.3959
X-MimeOLE: Produced By Microsoft MimeOLE V6.00.3790.4325
Received-SPF: none
X-Spam-Rating: 83.69

.
DELE 2
+OK marked deleted

Команда STAT позволяет определить количество сообщений в почтовом ящике (5) и их суммарный размер (868 540 байт).

Команда LIST показывает нам список идентификаторов сообщений и их размер в байтах. Заканчивается список точкой. В качестве аргумента этой команде можно передать id сообщения, тогда в ответ мы получим размер только этого сообщения.

Команда TOP позволяет получить заголовок сообщения (первый аргумент команды — id сообщения) и первые N строк тела сообщения (второй аргумент команды). В этом примере я указал N=0, потому что хотел посмотреть только заголовок сообщения. С тем же успехом можно было просто указать только один аргумент. Заканчивается ответ сервера также точкой. Команда TOP часто используется почтовыми клиентами для того, чтобы определить отправителя и тему сообщения без необходимости скачивать письмо целиком. Это экономит время и трафик пользователя.

Очевидно, тут мы имеем дело со спамом (см e-mail отправителя, X-Blacklisted-By и X-Spam-Rating), так что можно смело удалить сообщение, даже не скачивая его целиком. Для этого используется команда DELE. Сообщение будет помечено на удаление, но стерто только после того, как мы закроем соединение.

Отменить удаление всех помеченных нами сообщений можно командой RSET . Получить сообщение целиком можно с помощью команды RETR . Как и в случае с TOP, конец сообщения обозначается точкой. Не буду приводить примеры этих команд, так как тут все довольно очевидно.

По завершению работы можно попрощаться с сервером и закрыть соединение:

QUIT
+OK CommuniGate Pro POP3 Server connection closed

Вот пожалуй и все, что я хотел рассказать о протоколе 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.

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

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

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

  • Сергей Савенков

    какой то “куцый” обзор… как будто спешили куда то