Смекни!
smekni.com

Электронная почта как сервис глобальной сети. Протоколы передачи почты (стр. 8 из 12)

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

После того, как программа установила 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. Организация службы электронной почты в сети Интернет.

Основную роль в системе электронной почты играют программы трех типов:

  • транспортные агенты (MTA - Mail Transport Agent),
  • агенты доставки (MDA - Mail Delivery Agent),
  • пользовательские агенты (MUA - Mail User Agent).

Взаимодействие этих программ и работа системы электронной почты представлены на рисунке:

Рис. 3 Организация и функционирование службы электронной почты.

Транспортный агент работает, как правило, на почтовом сервере. Транспортный агент функционирует как маршрутизатор почтовых сообщений. Его функции следующие:

  • анализ и преобразование адресов и заголовков почтовых сообщений, в том числе:
    • разбор списков рассылки, пседонимов, переадресации (форвардинг),
    • преобразование адресов в формат другой почтовой системы, если MTA функционирует как шлюз между двумя почтовыми системами (например, между Internet Mail и Sprint Mail),
    • преобразование имени почтового домена отправителя (маскарад),
    • установка служебных заголовков в сообщении, отражающих его маршрут и процесс обработки;
  • опрос DNS на предмет имени и адреса почтового сервера адресата сообщения;
  • определение агента доставки для каждого сообщения и передача сообщения выбранному агенту доставки;
  • управление очередью сообщений, отложенный и повторный вызов агентов доставки в случае невозможности немедленной доставки сообщения;
  • возврат сообщений, которые по каким-либо причинам невозможно доставить по назначению.

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

  • local - письмо направлено на почтовый ящик, находящийся на этом же компьютере; доставка производится, например, добавлением содержимого сообщения в определенный файл (в Unix это файл /var/mail/почтовый_ящик).
  • SMTP - письмо направлено на почтовый ящик в другом почтовом домене; доставка производится путем соединения с транспортным агентом на удаленном сервере с помощью протокола SMTP.
  • prog - письмо должно быть обработано какой-либо программой; доставка производится вызовом этой программы, на вход которой подается содержимое письма.

Вообще методы доставки (и, соответственно, агенты) могут быть разнообразными: например, сохранение письма в базе данных; пересылка письма по факсу и т.д. Выбор агента доставки для каждого конкретного письма производится транспортным агентом в соответствии с заданной конфигурацией транспортного агента и адресом назначения письма.

Пользовательский агент является оболочкой пользователя для работы с электронной почтой, его функции:

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

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

Иванов (точнее, пользовательский агент Иванова) может получить доступ к своей почте двумя способами:

  • Иванов работает на том же компьютере, где находится почтовый сервер. В этом случае MUA Иванова тривиальным образом считывает поступившее сообщение из файла /var/mail/ivanov и сохраняет его, в случае необходимости, куда-то в свой каталог для осуществления своих функций, описанных выше.
  • Иванов работает на другом компьютере (точнее, Иванов не имеет возможности или желания работать на почтовом сервере). Эта ситуация наиболее типична для пользователей почты в организациях или сообществах. В этом случае для доступа к файлу /var/mail/ivanov через сеть используется протокол POP-3. На почтовом сервере запущена программа POP-сервер, а в MUA Иванова встроен POP-клиент. Так как протокол POP-3 работает поверх TCP/IP, нет никаких ограничений на местоположение компьютера Иванова.

В настоящее время получает распространение протокол 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 поставит сообщение в очередь для повторной отправки.