Att SMTP Server - Протокол SMTP

Электронная почта в той или иной форме существовала еще в 1960-х годах. Люди оставляли друг другу сообщения, используя различные методы на мэйнфреймах, но только в августе 1982 года, когда Институт информационных наук опубликовал протокол Simple Mail Transfer Protocol (SMTP; RFC 821), был предложен стандартизированный метод отправки и получения электронной почты.

Протокол SMTP быстро завоевал популярность в сети ARPANET, заменив более старые и сложные методы передачи почты с одного мэйнфрейма на другой, и впервые был реализован в конце 1982 года в одном из первых агентов передачи почты — Sendmail — в системе BSD 4.1c.
С тех пор протокол довольно регулярно пересматривался и расширялся, однако основной метод отправки почты в целом остался неизменным.

Этот протокол является текстовым и изначально не поддерживал передачу двоичных данных. Однако благодаря текстовому формату протокол оказался простым в реализации и обслуживании. В конце 80-х годов для кодирования и отправки двоичных данных по SMTP стал популярным протокол MIME (Multipurpose Internet Mail Extensions). Сегодня SMTP является доминирующим протоколом для отправки и получения электронной почты в Интернете, и глубокое знание этого протокола необходимо любому сетевому администратору.

Поскольку SMTP является текстовым протоколом, освоить его значительно проще, чем многие другие, и для прямой связи с SMTP-сервером достаточно программы, способной отправлять данные в формате ASCII через порт 25 протокола TCP/IP, например Telnet.

Почта отправляется по протоколу SMTP в рамках транзакции, то есть если отправка сообщения не завершилась полностью и без возникновения ошибки, сообщение отбрасывается. В стандарте RFC 821 транзакция описывается как состоящая из трёх этапов: указание отправителя, указание одного или нескольких получателей и отправка самого сообщения. Однако проще представить себе SMTP-транзакцию как состоящую из 5 этапов:

  • Рукопожатие
  • Отправить адрес для ответа
  • Отправить получателям
  • Отправить данные сообщения
  • Завершить транзакцию

Рукопожатие

При подключении к SMTP-серверу по порту 25 отправитель сообщения должен дождаться, пока получатель примет соединение и идентифицирует себя в следующем формате:

220 [домен] [Информация об услуге]
Пример: 220 example.com — услуга готова

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

HELO [домен]
Пример: HELO example.com

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

250 [Сообщение]
Пример: 250 example.com Привет, Боб с example.com

Код ответа 250 — это общий ответ ‘ОК’, который SMTP-сервер возвращает для подтверждения успешного завершения последнего действия.

Адрес для ответа:

Как только два сервера завершат обмен данными, SMTP-сессия считается начатой, и мы можем приступить к отправке команд на сервер. Если вы хотите узнать, какие команды поддерживает сервер, отправьте команду HELP — SMTP-сервер должен ответить сообщением с перечнем поддерживаемых команд.

Однако для отправки сообщения пользователю на этом сервере нам сначала необходимо указать адрес для ответа. Адрес для ответа должен быть указан в первую очередь, чтобы в случае возникновения каких-либо ошибок во время SMTP-транзакции о них можно было сообщить на этот адрес. Для этого мы используем команду ‘MAIL FROM:’:

ПИСЬМО ОТ:
Пример: MAIL FROM:

Обратите внимание на символы «меньше» и «больше». Согласно стандарту RFC 821 они обязательны для указания самого адреса электронной почты. Если адрес будет принят, SMTP вернет ответ 250 OK.

Отправить получателям

После указания адреса для ответа протокол SMTP позволит нам определить получателей сообщения. Для этого мы используем команду ‘RCPT TO:’:

RCPT КОМУ:
Пример: RCPT TO:

Чтобы указать нескольких получателей, просто повторите эту команду для каждого из них. Если сервер-получатель принимает почту для данного пользователя и может принять сообщение в данный момент, он должен ответить кодом 250 OK. Однако, если почта для этого пользователя не принимается, будет отправлен ответ 550 failure или соответствующий код ошибки. Если мы получим ответ 250 OK, мы можем приступить к отправке данных сообщения.

Отправить данные сообщения

Отправка данных по протоколу SMTP довольно проста, однако форматы сообщений могут быть довольно сложными, особенно при отправке двоичных вложений. Чтобы начать отправку данных, необходимо отправить команду ‘DATA’, на которую сервер должен ответить промежуточным ответом 354. Например:

354 Введите сообщение, заканчивающееся точкой (“.”) в отдельной строке

Самое простое сообщение, которое мы можем отправить, — это сообщение в виде простого текста, для которого не требуется использовать многочастный формат MIME. Все сообщения, будь то простой текст или что-либо другое, завершаются отправкой строки, содержащей только точку. Кроме того, перед отправкой сообщения можно указать некоторые поля заголовка, такие как «Date», «Subject», «To», «Cc» и «From».

Пример:

ДАННЫЕ
354 Введите сообщение, заканчивающееся точкой (“.”) в отдельной строке
Тема: Это тема текстового сообщения с планом
А это — текст самого сообщения в виде простого текста.

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

Завершение транзакции

До этого момента все данные, отправленные на принимающий SMTP-сервер, считаются одноразовыми. Если команда ‘QUIT’ не будет отправлена до закрытия соединения, сервер назначения просто удалит все сохраненные данные сообщений. Изначально эта команда использовалась как корректный способ закрытия соединения, однако сегодня она широко применяется для обозначения завершения транзакции: многие почтовые серверы ожидают получения команды QUIT, прежде чем поместить письмо в очередь для маршрутизации агентом передачи сообщений (MTA). После отправки команды QUIT сервер назначения должен отправить ответ с кодом 221, чтобы подтвердить завершение транзакции и закрытие соединения.

Если вы изучаете протокол SMTP, рекомендуется ознакомиться с документами RFC 821, 2476 и 2554. Следует помнить, особенно при чтении RFC 821, что с 1982 года почтовые серверы претерпели значительные изменения, отчасти в ответ на злоупотребления со стороны спамеров.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Всем известно, что наличие надежного SMTP-сервера - это ключ к правильной доставке электронной почты. Также хорошо известно, что никто больше не предлагает SMTP без аутентификации или открытой ретрансляции. НО ВЫ ВСЕ ЕЩЕ МОЖЕТЕ ПОЛУЧИТЬ ВЫСОКОКАЧЕСТВЕННЫЙ SMTP-СЕРВЕР БЕСПЛАТНО В СВОЕ ПОЛЬЗОВАНИЕ!

Нажмите здесь, чтобы получить БЕСПЛАТНЫЙ SMTP-сервер