Открыть сервис

Протокол SMTP

SMTP (англ. Simple Mail Transfer Protocol — простой протокол передачи почты) — это сетевой протокол, предназначенный для передачи электронной почты в сетях TCP/IP. Он является одним из основных протоколов прикладного уровня стека TCP/IP и используется для отправки сообщений от клиента к серверу, а также для пересылки писем между почтовыми серверами. SMTP описан в стандарте RFC 5321 (ранее — RFC 821), который определяет синтаксис команд, коды ответов и процедуру передачи данных.

История

Протокол SMTP был разработан в начале 1980-х годов как часть проекта ARPANET. Первая версия протокола была опубликована в 1982 году в RFC 821, авторами которого стали Джонатан Постел (Jonathan Postel) и Джойс Рейнольдс (Joyce Reynolds). Изначально SMTP предназначался для работы в сети ARPANET и поддерживал только передачу текстовых сообщений в кодировке ASCII (7-битные символы).

В 1995 году был опубликован стандарт RFC 1869, который ввёл расширения SMTP (ESMTP), позволяющие использовать дополнительные возможности, такие как аутентификация, шифрование и передача двоичных данных. В 2001 году вышла обновлённая версия протокола — RFC 2821, а в 2008 году — RFC 5321, который действует и в настоящее время.

С развитием интернета и ростом объёмов спама SMTP претерпел изменения, направленные на повышение безопасности. В 2000-х годах были внедрены механизмы аутентификации (SMTP AUTH) и шифрования (STARTTLS), а также протоколы проверки подлинности отправителя (SPF, DKIM, DMARC).

Архитектура и принцип работы

SMTP работает по модели «клиент-сервер». Взаимодействие происходит между двумя участниками: отправителем (клиентом) и получателем (сервером). Протокол использует текстовые команды, передаваемые по TCP-соединению, обычно на порт 25 (для обычной передачи), порт 587 (для отправки с аутентификацией) или порт 465 (для SMTP поверх SSL/TLS).

Основные этапы сеанса SMTP

  1. Установление соединения: клиент инициирует TCP-соединение с сервером, после чего сервер отправляет приветственное сообщение (код 220).
  2. Приветствие (EHLO/HELO): клиент отправляет команду EHLO (или HELO для старых версий), указывая своё доменное имя. Сервер отвечает списком поддерживаемых расширений.
  3. Указание отправителя (MAIL FROM): клиент отправляет команду MAIL FROM, указывая адрес отправителя.
  4. Указание получателя (RCPT TO): клиент отправляет одну или несколько команд RCPT TO, указывая адреса получателей.
  5. Передача данных (DATA): клиент отправляет команду DATA, после чего сервер подтверждает готовность принять сообщение. Затем клиент передаёт заголовки и тело письма, завершая передачу точкой на отдельной строке.
  6. Завершение сеанса (QUIT): клиент отправляет команду QUIT, сервер закрывает соединение.

Коды ответов SMTP

Сервер отвечает на каждую команду трёхзначным цифровым кодом, за которым следует текстовое пояснение. Основные коды:

  • 220 — сервер готов к работе
  • 250 — команда выполнена успешно
  • 354 — сервер готов принять данные (после команды DATA)
  • 421 — сервер недоступен
  • 450 — почтовый ящик недоступен (временная ошибка)
  • 550 — почтовый ящик не найден (постоянная ошибка)

Расширения SMTP (ESMTP)

Стандарт RFC 1869 ввёл механизм расширений, позволяющий серверу сообщать клиенту о поддерживаемых возможностях. Расширения указываются в ответе на команду EHLO. Наиболее распространённые расширения:

  • AUTHаутентификация пользователя (SMTP AUTH)
  • STARTTLS — шифрование соединения с помощью TLS
  • SIZE — указание максимального размера сообщения
  • PIPELINING — поддержка конвейерной обработки команд (без ожидания ответа на каждую)
  • DSN — уведомления о статусе доставки (Delivery Status Notification)
  • 8BITMIME — поддержка 8-битных символов в теле сообщения

SMTP и безопасность

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

Аутентификация (SMTP AUTH)

Расширение AUTH позволяет клиенту подтвердить свою личность перед отправкой письма. Используются различные методы аутентификации, такие как LOGIN, PLAIN, CRAM-MD5, DIGEST-MD5 и другие. Наиболее распространённым является метод LOGIN, при котором клиент последовательно передаёт имя пользователя и пароль в кодировке Base64.

Шифрование (STARTTLS)

Расширение STARTTLS позволяет установить защищённое соединение поверх существующего TCP-канала. После команды STARTTLS клиент и сервер переключаются на шифрование с помощью TLS (Transport Layer Security). Это предотвращает перехват данных, включая логины и пароли. Альтернативой является использование SMTP поверх SSL/TLS (SMTPS) на порту 465, где шифрование устанавливается сразу после соединения.

Проверка подлинности отправителя

Для борьбы со спамом и фишингом были разработаны протоколы, позволяющие проверять, что письмо было отправлено с легитимного сервера:

  • SPF (Sender Policy Framework) — проверяет, что IP-адрес отправителя указан в DNS-записях домена отправителя.
  • DKIM (DomainKeys Identified Mail) — использует цифровую подпись для подтверждения, что письмо не было изменено при передаче.
  • DMARC (Domain-based Message Authentication, Reporting and Conformance) — объединяет SPF и DKIM, задавая политику обработки писем, не прошедших проверку.

Применение SMTP

SMTP используется в следующих сценариях:

  1. Отправка писем от почтовых клиентов: программы для работы с электронной почтой (например, Microsoft Outlook, Mozilla Thunderbird, почтовые клиенты на мобильных устройствах) используют SMTP для отправки писем на почтовый сервер провайдера.
  2. Пересылка писем между серверами: когда письмо отправляется на адрес, обслуживаемый другим почтовым сервером, SMTP используется для передачи сообщения от сервера отправителя к серверу получателя (MTA — Mail Transfer Agent).
  3. Автоматическая отправка уведомлений: веб-приложения, интернет-магазины, системы мониторинга и другие сервисы используют SMTP для отправки автоматических писем (подтверждения заказов, уведомления о событиях, сброс паролей).

Ограничения SMTP

Несмотря на широкое распространение, SMTP имеет ряд недостатков:

  • Отсутствие встроенной аутентификации: изначально протокол не предусматривал проверки личности отправителя, что привело к массовому распространению спама.
  • Отсутствие шифрования: без расширений STARTTLS или SMTPS данные передаются в открытом виде.
  • Ограничения на размер сообщения: многие серверы ограничивают размер передаваемого письма (обычно 10–25 МБ).
  • Невозможность гарантировать доставку: SMTP не обеспечивает подтверждения доставки письма получателю (хотя существуют расширения DSN).

Альтернативы и развитие

С появлением веб-почты и API для отправки писем (например, SendGrid, Amazon SES, Mailgun) SMTP постепенно уступает место более современным протоколам и сервисам, которые предоставляют встроенные механизмы аутентификации, шифрования и аналитики. Тем не менее, SMTP остаётся основным протоколом для передачи электронной почты в интернете и поддерживается всеми почтовыми серверами.

Источники

  • RFC 5321 — Simple Mail Transfer Protocol
  • RFC 1869 — SMTP Service Extensions
  • RFC 3207 — SMTP Service Extension for Secure SMTP over Transport Layer Security
  • RFC 4954 — SMTP Service Extension for Authentication
  • W. Richard Stevens, «TCP/IP Illustrated, Volume 1: The Protocols»
  • Компьютерные сети. Принципы, технологии, протоколы / В. Г. Олифер, Н. А. Олифер

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →