Электронная почта. Архитектура и службы. Форматы сообщений.

Обычно они состоят из двух

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

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

Составление — процесс создания сообщений и ответов. Хотя для создания тела сообщения можно использовать любой текстовый редактор, система поможет в составлении адреса и многочисленных полей заголовков, добавляемых к каждому сообщению. Например, при составлении ответа на сообщение система электронной почты может извлечь адрес отправителя из полученного письма и автоматически поместить его в нужное место в ответе.

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

Уведомление — информирование отправителя о состоянии сообщения. Что с ним стало? Доставлено оно, потеряно или отвергнуто? Существует множество приложений, в которых подтверждение доставки имеет большую важность и даже может иметь юридическую значимость.

Отображение приходящих сообщений на экране необходимо, чтобы пользователи имели возможность читать свою электронную почту. Иногда требуется преобразование текста или вызов специальной программы просмотра, например, для просмотра файла формата PostScript или прослушивания оцифрованного звукового сообщения. Иногда также применяются простые преобразования и форматирование текста.

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

В основе всех современных систем электронной почты лежит ключевая идея о разграничении конверта и содержимого письма. Конверт заключает в себе сообщение. Он содержит всю информацию, необходимую для доставки сообщения — адрес получателя, приоритет, уровень секретности и т. п. Все эти сведения отделены от самого сообщения. Агенты передачи сообщений используют конверт для маршрутизации, аналогично тому, как это делает обычная почтовая служба. Сообщение внутри конверта состоит из двух частей: заголовка и тела письма. Заголовок содержит управляющую информацию для пользовательских агентов. Тело письма целиком предназначается для человека-получателя.

Пользовательский агент

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

Отправление электронной почты

Чтобы послать письмо электронной почтой, пользователь должен составить текст сообщения, указать адрес получателя, а также, возможно, некоторые дополнительные параметры. Текст сообщения может быть набран в отдельном текстовом редакторе, с помощью программы изготовления документов или в текстовом редакторе, встроенном в почтовый редактор. Адрес получателя должен быть указан в формате, понятном для пользовательского агента. Многие пользовательские агенты ожидают DNS-адреса вида полъзователъ@ВМ5-адрес.

 

SMTP — простой протокол электронной почты

В Интернете для доставки электронной почты машина-источник устанавливает TCP-соединение с портом 25 машины-приемника. Этот порт прослушивается почтовым демоном, и их общение происходит с помощью протокола SMTP (SimpleMailTransferProtocol — простой протокол электронной почты). Этот демон принимает входящие соединения и копирует сообщения из них в соответствующие почтовые ящики. Если письмо невозможно доставить, отправителю возвращается сообщение об ошибке, содержащее первую часть этого письма.

После установления соединения, как правило, используя 25 порт, клиент должен обязательно отправить на сервер команду HELO <HOST>. Эта команда используется для идентификации машины отправителя (HOST) на SMTP сервере.

Следующее командой должна идти команда MAIL, идентифицирующая отправителя:

MAIL <SP> FROM: <reverse-path><CRLF>

Следующей командой идёт команда RCPT:

RCPT <SP>TO:<forward-path><CRLF>

Эта команда передаёт на сервер почтовый адрес получателя письма.

Следующей командой идёт команда DATA <CRLF>

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

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

РОРЗ

К сожалению, такое решение создает новую проблему: как пользователю забрать свою почту у агента передачи сообщений провайдера? Ответ таков: следует создать специальный протокол, который позволил бы пользовательскому агенту (на машине клиента) соединиться с агентом передачи сообщений провайдера (на машине провайдера) и скопировать хранящуюся для него почту. Одним из таких протоколов является РОРЗ (PostOfficeProtocol v. 3 — почтовый протокол, 3-я версия), определенный в документе RFC 1939. При доставке сообщений возможны две ситуации: первая — когда и отправитель и получатель постоянно подключены к Интернет (рис. 5.2,а); вторая ситуация — когда отправитель подключен к линии, а получатель — нет (рис. 5.2,б).

Протокол РОРЗ запускается, вместе с почтовым клиентом. Последний дозванивается до провайдера (если только машина уже не находится в подключенном состоянии) и устанавливает TCP-соединение с агентом передачи сообщений с использованием порта 110. После установки соединения протокол РОРЗ проходит три последовательных состояния.

1. Авторизация.

2. Транзакции.

3. Обновление.

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

IMAP

Пользователю, имеющему одну учетную запись у одного провайдера и всегда соединяющемуся с провайдером с одной и той же машины, вполне достаточно протокола РОРЗ. Этот протокол и используется повсеместно благодаря его простоте и надежности. У многих пользователей есть одна учетная запись в учебном заведении или на работе, но они хотят иметь доступ к ней и из дома, и с работы (учебы), и во время поездок (с портативного компьютера), и изинтернет-кафе во время так называемого отпуска. Хотя РОРЗ и предоставляет возможность разрешения такой ситуации (так как с его помощью все могут получить всю хранящуюся почту), но проблема в том, что корреспонденция пользователя очень быстро распространится более или менее случайным образом по всем машинам, с которых он получает доступ в Интернет, и некоторые из этих машин могут даже не принадлежать этому пользователю. Это неудобство привело к созданию альтернативного протокола доставки сообщений, IMAP (InteractiveMailAccessProtocol — протокол интерактивного доступа к электронной почте), определенного в RFC 2060. В отличие от протокола РОРЗ, который подразумевает, что пользователь будет очищать почтовый ящик после каждого контакта с провайдером и будет работать с почтой в отключенном режиме, протокол IMAP предполагает, что вся почта будет оставаться в почтовых ящиках на сервере неограниченно долго. IMAP обладает широким набором механизмов для чтения сообщений или даже частей сообщений.

 

Электронное письмо состоит из следующих частей:

Заголовков SMTP-протокола, полученных сервером. Эти заголовки могут включаться, а могут и не включаться в тело письма в дальнейшем, так что возможна ситуация, когда сервер обладает большей информацией о письме, чем содержится в самом письме. Так, например, поле RCPT TO указывает получателя письма, при этом в самом письме получатель может быть не указан. Эта информация передаётся за пределы сервера только в рамках протокола SMTP, и смена протокола при доставке почты (например, на узле-получателе в ходе внутренней маршрутизации) может приводить к потере этой информации. В большинстве случаев эта информация не доступна конечному получателю, который использует не-SMTP протоколы (POP3, IMAP) для доступа к почтовому ящику. Для возможности контролировать работоспособность системы эта информация обычно сохраняется в журналах почтовых серверов некоторое время.

Самого письма (в терминологии протокола SMTP — 'DATA'), которое, в свою очередь, состоит из следующих частей, разделённых пустой строкой:

Заголовков письма, иногда называемых по аналогии с бумажной почтой конвертом (англ. envelope). В заголовке указывается служебная информация и пометки почтовых серверов, через которые прошло письмо, пометки о приоритете, указание на адрес и имя отправителя и получателя письма, тема письма и другая информация. С термином «конверт» есть некоторая путаница, потому что в зависимости от ситуации «конвертом» называют либо заголовок письма, либо информацию, которой располагает SMTP-сервер после получения письма (так, например, в документации к почтовому серверу postfix, термин «конверт» используется в отношении SMTP-данных, включающих не только поля RCPT TO и MAIL FROM, но и IP-адрес отправителя, его строчка HELO и т. д.)

Тело письма. В теле письма находится, собственно, текст письма. Согласно стандарту, в теле письма могут находиться только символы ASCII. Поэтому при использовании национальных кодировок или различных форм представления информации (HTML, RTF, бинарные файлы) текст письма должен кодироваться по стандарту MIME и не может быть прочитан человеком без использования декодера или почтового клиента с таким декодером.

[править]

Заголовок SMTP

Заголовок SMTP содержит в себе следующую информацию:

имя отправляющего узла (не имя отправителя, а имя сервера или компьютера пользователя, который обратился к серверу) — параметр сообщения HELO/EHLO, обычно дополняющийся «объективной» информацией самим сервером (HELO может содержать произвольное имя, а IP отправителя подделать существенно сложнее), по IP-адресу осуществляется поиск PTR-записи в DNS, всё это вместе позволяет идентифицировать отправителя на сетевом уровне (и в реальности часто используется для проверки надёжности отправителя с помощью чёрных/белых списков, в том числе через интернет — см RBL).

Поле MAIL FROM:, содержащее адрес отправителя. Адрес может быть произвольным (в том числе с несуществующих доменов, однако этот адрес может также проверяться при первичной проверке на спам).

Поле RCPT TO: — наиболее важное поле для доставки почты, содержит электронный адрес получателя. Большинство почтовых систем в случае возможности проверяет, существует ли пользователь и может отказаться принимать почту, если пользователь, указанный в RCPT TO не существует.