Авторизация пользователя
После того, как программа установила TCP-соединение с портом протокола РОРЗ (официальный номер 110), необходимо послать команду USER с именем пользователя в качестве параметра. Если ответ сервера будет +OK, нужно послать команду PASS с паролем этого пользователя:
CLIENT: USER kcopeSERVER: +OKCLIENT: PASS secretSERVER: +OK kcope's maildrop has 2 messages (320 octets)...(B почтовом ящике kcope есть 2 сообщения (320 байтов) ...)Транзакции РОРЗ
После того, как стадия авторизации окончена, обмен переходит на стадию транзакции. В следующих примерах демонстрируется возможный обмен сообщениями на этой стадии. Команда STAT возвращает количество сообщений и количество байтов в сообщениях:
CLIENT: STATSERVER: +ОК 2 320Команда LIST (без параметра) возвращает список сообщений в почтовом ящике и их размеры:
CLIENT: LISTSERVER: +ОК 2 messages (320 octets)SERVER: 1 120SERVER: 2 200SERVER: . ...Команда LIST с параметром возвращает информацию о заданном сообщении:
CLIENT: LIST 2SERVER: +ОК 2 200 ... CLIENT: LIST 3SERVER: -ERR no such message, only 2 messages in maildropКоманда TOP возвращает заголовок, пустую строку и первые десять строк тела сообщения:
CLIENT: TOP 10SERVER: +OKSERVER: <the POP3 server sends the headers of the message,a blank line, and the first 10 lines of the message body>(сервер POP высылает заголовки сообщений, пустую строку и первые десять строк тела сообщения)SERVER: . ... CLIENT: TOP 100SERVER: -ERR no such messageКоманда NOOP не возвращает никакой полезной информации, за исключением позитивного ответа сервера. Однако, позитивный ответ означает, что сервер находится в соединении с клиентом и ждет запросов:
CLIENT: NOOPSERVER: +OKСледующие примеры показывают, как сервер POP3 выполняет действия. Например, команда RETR извлекает сообщение с указанным номером и помещает его в буфер местного UA:
CLIENT: RETR 1SERVER: +OK 120 octetsSERVER: <the POP3 server sends the entire message here>(РОРЗ-сервер высылает сообщение целиком) SERVER: .Команда DELE отмечает сообщение, которое нужно удалить:
CLIENT: DELE 1SERVER: +OK message 1 deleted...(сообщение 1 удалено)CLIENT: DELE 2SERVER: -ERR message 2 already deleted(сообщение 2 уже удалено)Команда RSET снимает метки удаления со всех отмеченных ранее сообщений:
CLIENT: RSET SERVER: +OK maildrop has 2 messages (320 octets)(в почтовом ящике 2 сообщения (320 байтов))Команда QUIT закрывает соединение с сервером:
CLIENT: QUITSERVER: +OK dewey POP3 server signing offCLIENT: QUITSERVER: +OK dewey POP3 server signing off (maildrop empty)...CLIENT: QUITSERVER: +OK dewey POP3 server signing off (2 messages left) ...Отмеченные для удаления сообщения не удаляются до тех пор, пока не выдана команда QUIT и не началась стадия обновления. В любой момент в течение сеанса клиент имеет возможность выдать команду RSET, и все отмеченные для удаления сообщения будут восстановлены.
3. Организация службы электронной почты в сети Интернет.
Основную роль в системе электронной почты играют программы трех типов:
Взаимодействие этих программ и работа системы электронной почты представлены на рисунке:
Рис. 3 Организация и функционирование службы электронной почты.
Транспортный агент работает, как правило, на почтовом сервере. Транспортный агент функционирует как маршрутизатор почтовых сообщений. Его функции следующие:
Агент доставки производит доставку сообщения каким-либо специфическим способом. Существует несколько стандартных типов агентов доставки:
Вообще методы доставки (и, соответственно, агенты) могут быть разнообразными: например, сохранение письма в базе данных; пересылка письма по факсу и т.д. Выбор агента доставки для каждого конкретного письма производится транспортным агентом в соответствии с заданной конфигурацией транспортного агента и адресом назначения письма.
Пользовательский агент является оболочкой пользователя для работы с электронной почтой, его функции:
Рассмотрим работу службы электронной почты на примере (Рис 3). Пусть почтовый сервер, изображенный на рисунке, имеет адрес m.vvsu.ru и сконфигурирован для приема почты с адресами типа некто@cts.vvsu.ru. Соответственно, в базе данных DNS для зоны vvsu.ru есть запись вида
cts.vvsu.ru. IN MX 10 m.vvsu.ru.Пусть также пользователь, изображенный на рисунке, имеет адрес ivanov@cts.vvsu.ru.
Рассмотрим входящее сообщение от bg@aquarium.ru к ivanov@cts.vvsu.ru. Сообщение поступает по сети к транспортному агенту. (Для передачи сообщений транспортному агенту по сети используется протокол SMTP). MTA, проанализировав заголовок сообщения, определяет, что оно адресовано в почтовый домен cts.vvsu.ru, который он обслуживает. В соответствии с этим выбирается агент доставки local, запускается программа этого агента и на вход ей подается текст сообщения со всеми заголовками. Агент доставки каким-то способом, не интересным для транспортного агента, производит доставку сообщения и прекращает свою работу. Транспортный агент анализирует статус выхода (exit status) программы агента доставки, по которому определяет, было ли сообщение успешно доставлено или произошла ошибка. В случае ошибки MTA формирует сообщение об ошибке, исходящее с адреса MAILER-DAEMON@m.vvsu.ru, которое будет отправлено отправителю письма (и, как правило, администратору почтового сервера по адресу postmaster@m.vvsu.ru). В случае успешного завершения работы агента доставки письмо считается доставленным получателю.
Агент доставки local (в Unix это программа mail, запущенная как "mail -d ivanov") производит доставку методом добавления содержимого письма к файлу /var/mail/ivanov (в дальнейшем для упрощения мы будем говорить о почтовом сервере под Unix, хотя при обсуждении общей организации системы электронной почты это не имеет принципиального значения).
Иванов (точнее, пользовательский агент Иванова) может получить доступ к своей почте двумя способами:
В настоящее время получает распространение протокол IMAP-4, по существу являющийся расширенной версией протокола POP-3. Он, в частности, позволяет пользовательскому агенту каталогизировать и хранить сообщения на почтовом сервере, а не на компьютере пользователя, как это происходит при использовании POP-3. Это удобно в случае, когда Иванов не имеет постоянно закрепленного за собой компьютера - например, Иванов - студент, работающий с почтой из компьютерного класса.
Теперь рассмотрим исходящее сообщение от ivanov@cts.vvsu.ru к bg@aquarium.ru. Сообщение поступает к транспортному агенту двумя способами в зависимости от того, где работает Иванов. Если Иванов работает на почтовом сервере, то его MUA напрямую обращается к транспортному агенту и передает ему сообщение для БГ. Если же Иванов работает на другом компьютере, то его MUA связывается с транспортным агентом через сеть по протоколу SMTP. (Опять, так как протокол SMTP работает поверх TCP/IP, нет никаких ограничений на местоположение компьютера Иванова).
Получив сообщение, MTA анализирует его заголовок и определяет, что это сообщение направлено в другой почтовый домен и не попадает ни под какие особые случаи (например, не должно быть доставлено через UUCP или отослано по факсу - это все определяется конфигурацией MTA). Следовательно, для доставки этого сообщения выбирается агент SMTP, при этом MTA делает запрос в DNS на предмет того, кто является обработчиком почты для домена aquarium.ru. (DNS вернет relay.rinet.ru, IP-адрес=195.54.192.35). Этот адрес вместе с текстом сообщения будет передан агенту доставки, который по протоколу SMTP соединится с указанным адресом и таким образом отправит сообщение транспортному агенту сервера relay.rinet.ru. Если во время этой операции произошла нефатальная ошибка (например, удаленный сервер временно выключен), то агент SMTP вернется со статусом "Отложено" и MTA поставит сообщение в очередь для повторной отправки.