Протокол 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
- Установление соединения: клиент инициирует TCP-соединение с сервером, после чего сервер отправляет приветственное сообщение (код 220).
- Приветствие (EHLO/HELO): клиент отправляет команду
EHLO(илиHELOдля старых версий), указывая своё доменное имя. Сервер отвечает списком поддерживаемых расширений. - Указание отправителя (MAIL FROM): клиент отправляет команду
MAIL FROM, указывая адрес отправителя. - Указание получателя (RCPT TO): клиент отправляет одну или несколько команд
RCPT TO, указывая адреса получателей. - Передача данных (DATA): клиент отправляет команду
DATA, после чего сервер подтверждает готовность принять сообщение. Затем клиент передаёт заголовки и тело письма, завершая передачу точкой на отдельной строке. - Завершение сеанса (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 используется в следующих сценариях:
- Отправка писем от почтовых клиентов: программы для работы с электронной почтой (например, Microsoft Outlook, Mozilla Thunderbird, почтовые клиенты на мобильных устройствах) используют SMTP для отправки писем на почтовый сервер провайдера.
- Пересылка писем между серверами: когда письмо отправляется на адрес, обслуживаемый другим почтовым сервером, SMTP используется для передачи сообщения от сервера отправителя к серверу получателя (MTA — Mail Transfer Agent).
- Автоматическая отправка уведомлений: веб-приложения, интернет-магазины, системы мониторинга и другие сервисы используют 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 →