Маленькие секреты POP3

Виктор Вислобоков

Наверное практически каждый из нас хоть раз сталкивался с POP3. Это протокол, по которому раздается пришедшая к вам почта. Он широко используется вместе с протоколом IMAP как провайдерами, так и внутри предприятий и организаций при организации почтовых серверов. Многие знают как настроить подключение к POP3 серверу в Outlook Express, Mozilla Mail и в других популярных программах, но довольно немногие знают, что с POP3 сервером можно вести диалоги с помощью обычного telnet'а. И еще меньшее количество людей осознает, что практически все почтовые программы не используют возможностей POP3 в полной мере.

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

Подключение с серверу

Итак. Давайте подключимся к какому-либо POP3 серверу, который есть у вас под рукой. Это может быть сервер внутри вашей фирмы или сервер провайдера - в данном случае неважно. Важно, чтобы у вас была возможность подключаться к этому серверу посредством ввода имени и пароля.

Прямо в консоли или в окне терминала наберите команду:
telnet pop3.domain.ru 110

Здесь "pop3.domain.ru" - это имя POP3 сервера, к которому вы производите подключение. Вместо имени можно использовать IP адрес. А вот 110 - это номер порта TCP/IP за которым закреплен протокол POP3. Вы можете это легко увидеть/проверить, если посмотрите файл /etc/services на вашей машине.

Если вы правильно указали имя (или адрес) сервера, то вы увидите картинку вида:
Trying pop3.domain.ru...
Connected to pop3.domain.ru.
Escape character is '^]'.
+OK POP3.pop3.domain.ru v2000.70 server ready
Сразу хочу сделать несколько замечаний. Имя сервера в последней строки может отличаться от того, что указали вы. Это связано с тем, что для фактического имени сервера существует ряд псевдонимов, по которым вы можете обращаться к серверу точно также как и по основному имени. Однако, откликаться сервер будет, используя своё фактическое имя, а не псевдоним. Далее, в последней строке как правило выдается имя и версия программного продукта, который реализует протокол POP3. Таким образом, последняя строка для вашего случая может существенно отличаться от указанной здесь, что впрочем вполне нормально.

Теперь, когда подключение к серверу осуществлено, сервер переходит в режим авторизации. Чтобы работать далее, вам необходимо её пройти. Для этого сперва наберите команду:
USER <имя>	
где <имя> замените на ваше регистрационное имя на сервере. После ввода команды курсор должен перейти на следующую строку без вывода каких-либо сообщений. Однако, некоторые реализации серверов могут выдать приглашение для ввода пароля:
+OK User name accepted, password please
Далее неберите команду:
PASS <пароль>
где <пароль> замените на ваш пароль на сервере. После ввода этой команды вы либо увидите сообщение об ошибке типа
ERR Authorization failed
или
-ERR Bad login
либо дальнейшее приглашение к работе
+OK Mailbox open,5 messages

Как можно догадаться, "5 messages" означает, что в вашем почтовом ящике для вас лежит 5 сообшений. Теперь начинается самое интересное.

Работа с сервером POP3 с использованием команд

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

STAT
Осуществляет проверку состояния почтового ящика. Результатом выполнения этой команды является строка вида "+OK mm nn", где mm - количество сообщений в почтовом ящике, а nn - занимаемый этими сообщенийми размер.

LIST
Выдает список сообщений в виде "номер размер".Номер служит как бы идентификатором конкретного сообщения, а что означает размер понятно и так.

LAST
Выдает номер сообщения, которое является новым (которого не было в прошлое посещение)

NOOP
Ничего не делать. Команда нужна видимо для каких-то внутренних отладочных целей. Кроме того так требует стандарт на POP3 протокол.

RETR номер
Показать сообщение с указанным номером. Сообщение показывается в том виде, в котором хранится в почтовом ящике, т.е. со всеми заголовками.

DELE номер
Отметить сообщение с указанным номером к удалению. Фактического удаления сообщения в режиме транзакций не происходит. См. ниже.

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

TOP номер n
Показывает заголовки сообщения, с указанным номером, затем пустую строку и n строк из тела сообщения.

QUIT
Выход из режима транзакций в режим обновления.

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

Примеры использования команд POP3

Прочитав обзор команд, кто-то уже наверное сообразил сам о том, какие выгоды можно извлечь из их использования. Для остальных я приведу несколько примеров.

Пример 1.
Вы сидите дома и хотите почитать почту, которую вам прислали. Для этого через модем вы подключаетесь к провайдеру, запускаете свой любимый почтовый клиент, например Mozilla Mail, и с удивлением и раздражением видите, что в вашем ящике почты несколько мегабайт. Счастья тащить скажем 5-10 мегабайт по модему довольно мало. Хорошо, если ваш провайдер предоставляет возможность зайти на специальную страничку и удалить ненужные сообщения из ящика. А если нет?

Вот тут на помощь и приходит знание работы POP3. Вы быстренько заходите на POP3 сервер через telnet. Делаете LIST и видите номера сообщений, которые занимают эти мегабайты. С помощью команды TOP, просмотрев заголовки сообщений (от кого они), вы решаете нужны ли они вам. Если не нужны, вы удаляете их командой DELE, не забыв после этого набрать QUIT два раза. И все! Теперь оставшиеся небольшие сообщения вы можете спокойно и быстро скачать с помощью обычного почтового клиента.


Пример 2.
В последнее время спамеры стали настоящей бедой. На мой старый почтовый ящик, адрес которого видимо уже капитально засвечен, я получают до 100 сообщений спама на одно действительно нужное. К провайдеру обращался - гробовое молчание. С одной стороны провайдеру не хочется тратить средства и силы на установку фильтра против спама, с другой стороны им даже выгодно - больше сообщений у меня в ящике, значит я дольше просижу на линии и заплачу больше денег. Что делать?

Довольно просто написать программу, которая будет выкачивать небольшие заголовки сообщений и по этим заголовкам решать вопрос об удалении и удалять мусор. Остаток опять-таки можно скачать быстро и легко. Вопрос о программе не голословное утверждение - я написал такую программу на Perl за один вечер.

Заключение

Вот собственно и всё! Хочу только посетовать на то, что почтовые программы не используют эти простые и удобные возможности POP3. Например, насколько было бы лучше, если бы я мог скачать только заголовки и размеры сообщений, а дальше решить что мне делать с сообщением - выкачивать его или просто сразу удалить. К сожалению я не знаю ни одного почтового клиента, который бы умел так делать.