Компоненты системы электронной почты

Материал из Wiki Open book
Перейти к: навигация, поиск

Содержание

Описание

Система электронной почты состоит из многих компонентов. Они могут быть выполнены в виде одной или нескольких программ.

Файл:Mail-schema.jpg

На рисунке представлены основные компоненты:

  • Пользовательский почтовый агент (MUA — Message User Agent).
  • Транспортный агент (МТА — Message Transfer Agent).
  • Агент подачи сообщений (MSA — Message Submission Agent).
  • Агент доставки почты (АДП).
  • Агент доступа (АД).

Если брать в качестве примера Microsoft Exchange, то большинство компонентов являются частью этой программы, т.е. находятся внутри программы. В большинстве реализаций системы электронной почты в UNIX принято каждый из компонентов делать в виде нескольких программ. В результате мы получаем большую свободу выбора. Вы можете комбинировать различные компоненты от разных производителей и получать почтовый сервер, настроенный под ваши конкретные задачи.

Например, в качестве MTA можно использовать sendmail или postfix. А для доставки сообщений в почтовые ящики mail.local или procmail.

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

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

В роли пользовательских агентов выступают такие программы как: The Bat, Outlook и Outlook Express. Если говорить про Linux: Evolution, KMail, pine и др.

При передаче письма транспортному агенту и агенту подачи используется протокол SMTP.

Транспортный агент

Транспортный агент (mail transport agent) выполняет две основные задачи:

  • Прием почты от пользовательского агента и пересылка ее на другой транспортный агент.
  • Прием почты от других транспортных агентов.

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

На другой стороне транспортный агент проверяет:

  • Предназначено ли это письмо для данной машины (домена),
  • Есть ли почтовый ящик пользователя на машине.

После всех проверок он принимает письмо и передает его Агенту доставки почты.

В мире UNIX существует большое количество программ, реализующих функции транспортного агента. Среди наиболее популярных бесплатных реализаций транспортных агентов можно выделить sendmail, postfix, exim и qmail. Каждая из программ имеет свои достоинства и недостатки.

Агент подачи сообщений

Агенты подачи сообщений (Message Submission Agemt — MSA) — это одна из разновидностей режима работы транспортного агента.

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

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

Сейчас все эти функции лежат на MTA (25 порт). MSA (587 порт) был придуман как раз для второй задачи — прием почты от своих пользователей. Таким образом, можно было попытаться ввести элементарные антиспамерские приемы. Но для того что бы эта защита заработала, на всех серверах электронной почты должны перейти на прием почты от локальных клиентов при помощи MSA. Этого к сожалению не случилось.

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

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

Агент подачи слушает запросы на 587 порту, поэтому все пользовательские агенты необходимо сконфигурировать таким образом, чтобы они отправляли почту на этот порт.

Все особенности работы агента подачи описаны в RFC 2476.

Агент доставки почты

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

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

Транспортный агент передает письмо агенту доставки (обычно по протоколу LMTP), а уж Агент доставки сам решает, как и где сохранить письмо пользователя.

В качестве агента доставки может выступать простейшая программа, которая просто складывает почту в ящик. Так и программы фильтры, которые могут что либо сделать с почтой, перед тем как поместить ее в почтовый ящик.

Агенты доступа

Еще одна часть программного обеспечения, работающего с почтовыми ящиками пользователей — это Агенты доступа.

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

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

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

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

SMTP

В качестве основного протокола взаимодействия в системе электронной почты используются протоколы SMTP (Simple Mail Transfer Protocol) и ESMTP (Extended SMTP). Они описаны в RFC 2821, RFC 1869, RFC 1870, RFC 1891 и RFC 1985.

Протокол SMTP задумывался как простой протокол взаимодействия, при помощи которого пользователь мог напрямую общаться с почтовым транспортным агентом. Конечно же, сейчас пользователи сами не работают с транспортными агентами. Для облечения работы используются пользовательские агенты. Но они (пользовательские агенты) для взаимодействия с транспортными агентами используют протокол SMTP или ESMTP.

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

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

Для подключения к почтовому транспортному агенту использовалась программа telnet, с явным указанием порта — 25.

$ telnet localhost 25
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.
220 Artur ESMTP mail server

Команды HELO и EHLO

В начале сеанса необходимо представиться.

EHLO artur
250-localhost Hello localhost [127.0.0.1], pleased to meet you
250-ENHANCEDSTATUSCODES
250-PIPELINING
250-8BITMIME
250-SIZE
250-DSN
250-ETRN
250-AUTH DIGEST-MD5 CRAM-MD5
250-STARTTLS
250-DELIVERBY
250 HELP

Команда HELO предназначена для представления клиента серверу. В качестве аргумента используется имя клиента. Имеется в виду не имя пользователя, а имя машины-клиента системы электронной почты (MUA).

EHLO — это расширенный вариант приветствия.

В качестве ответа, сервер должен вернуть 250 (подробнее о кодах ответов смотрите ниже). Заодно, мы можем узнать, какие технологии поддерживает SMTP сервер.

Команда MAIL

После представления друг другу, мы должны дать команду MAIL. Эта команда означает начало транзакции -- начало почтовой сессии.

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

MAIL FROM: <artur@kryukov.biz>
250 2.1.0 artur@kryukov.biz... Sender ok

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

Команда RCPT

При помощи команды RCPT мы указываем почтовый ящик получателя. В самом простом варианте это может выглядеть так:

rcpt to: <artur@kryukov.biz>
250 2.1.5 artur@kryukov.biz... Recipient ok

Можно указать несколько адресов назначения в одной команде.

rcpt to: <artur@kryukov.biz,any@body.com>

Или дать несколько команд RCPT.

Так же в этой команде можно указать маршрут, по которому необходимо доставить письмо.

rcpt to: <@bk.ru:artur@kryukov.biz>

В этом примере показано, что письмо для отправки следует доставить на сервер bk.ru. А тот в свою очередь должен передать его по адресу artur@kryukov.biz. Но вы должны понимать, что на сервере bk.ru может быть запрещена ретрансляция, в этом случае он вернет сообщение об ошибке. Адреса с включенными маршрутами сейчас большая редкость.

Команда DATA

Команда DATA определяет начало передачи данных. Получатель в ответ выдает оклик 354 и все остальные строки, пришедшие от клиента, трактует как почтовые данные. Данные должны включать только печатаемые символы. Данные должны завершаться строкой, в начале которой стоит символ точка.

DATA
354 Enter mail, end with "." on a line by itself
Hello user
I'm send a letter for you ^)
Regards, Artur
.
250 2.0.0 m7MEn569008029 Message accepted for delivery

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

Команда QUIT

После передачи данных, необходимо дать команду QUIT.

quit
221 2.0.0 cosmos.kryukov.biz closing connection
Connection closed by foreign host.

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

Отклики SMTP

Отклики на запросы служат для синхронизации действий клиента и сервера SMTP. На каждую команду должен генерироваться единственный отклик. В данном случае имеется ввиду — единственный номер отклика.

Отклик SMTP содержит трехзначный номер, за которым обычно следует строка текста. Числовые коды предназначены для автоматической обработки, текст для человека.

Отклик состоит из трех цифр.

  • Первая цифра определяет успех, неудачу или незавершенность команды.
    • 1 — Позитивный предварительный отклик. Команда была воспринята, но запрошенные действия пока не выполнены. Такой отклик не определяет окончательного подтверждения выполнения команды.
    • 2 — Позитивный окончательный отклик.
    • 3 — Позитивный промежуточный отклик. Команда была воспринята, но запрошенные действия до конца не выполнены. Сервер ждет дополнительной информации. Клиенту требуется передать дополнительную команду, содержащую требуемые данные.
    • 4 — Негативный отклик о временных проблемах.
    • 5 — Негативный отклик о постоянных проблемах. Команда не принята и запрошенная операция не выполнена.
  • Вторая цифра показывает категорию ошибки (ошибка почтовой системы, не корректный синтаксис и т.п).
    • 0 — ошибка синтаксиса.
    • 1 — информация. Отклики на запрос информации.
    • 2 — соединение. Отклики, относящиеся к каналу передачи.
    • 3 — не используется.
    • 4 — не используется.
    • 5 — почтовая система. Такие отклики показывают состояние принимающей почтовой системы, по отношению к запрошенной передаче или другим действиям почтовой системы.
  • Третья цифра позволяет получить дополнительную информацию для каждой категории, заданной второй цифрой.

Коды ошибок
Код Описание
500 Ошибка в синтаксисе, команда не опознана.
501 Ошибка в синтаксисе параметров.
502 Команда не поддерживается.
503 Неправильная последовательность команд.
504 Параметр команды не поддерживается.

Информационные коды.
Код Описание
211 Состояние системы или помощь.
214 Сообщение-справка.

Служебные коды.
Код Описание
220 Служба готова.
221 Служба закрывает канал передачи.
421 Служба недоступна

Коды ответа на действия клиентов SMTP
Код Описание
250 Запрошенное действие выполнено успешно (ОК).
251 Пользователь не является локальным, сообщение будет переслано по <путь-пересылки>
354 Начать ввод сообщения: закончить по <CRLF>.<CRLF>
450 Запрошенное действие не выполнено — почтовый ящик недоступен.
451 Запрошенное действие отвергнуто — ошибка обработки.
452 Запрошенное действие не выполнено — в системе недостаточно дискового пространства.
550 Запрошенное действие не выполнено — почтовый ящик недоступен.
551 Пользователь не является локальным, попробуйте переслать сообщение по <путь-пересылки>.
552 Запрошенное действие отвергнуто — превышены допустимые пределы хранения.
553 Запрошенное действие не выполнено — указано недопустимое имя почтового ящика.
554 Операция прекращена.
Инструменты
    
Личные инструменты