SMTP-протокол: что это, команды и порты
SMTP (Simple Mail Transfer Protocol) - протокол, который отвечает за отправку и пересылку электронной почты. Каждое email-сообщение, которое вы отправляете, проходит через SMTP. Протокол описан в RFC 5321 и используется с 1982 года, когда вышла его первая спецификация (RFC 821).
Как работает отправка письма
Когда вы нажимаете «Отправить» в почтовом клиенте, происходит следующее:
- Клиент (MUA) подключается к исходящему SMTP-серверу (MTA) вашего провайдера.
- MTA вашего провайдера определяет MX-запись домена получателя через DNS.
- Ваш MTA устанавливает SMTP-соединение с MTA получателя и передаёт письмо.
- MTA получателя передаёт письмо в MDA (Mail Delivery Agent), который кладёт его в почтовый ящик.
SMTP отвечает только за передачу. Для чтения почты используются другие протоколы: IMAP и POP3.
Основные команды SMTP
SMTP - текстовый протокол. Клиент отправляет команды, сервер отвечает трёхзначными кодами. Основные команды:
EHLO(или HELO) - приветствие. Клиент представляется серверу и запрашивает список поддерживаемых расширений.MAIL FROM- указывает адрес отправителя (envelope sender).RCPT TO- указывает адрес получателя. Можно вызвать несколько раз для нескольких получателей.DATA- начинает передачу тела письма (заголовки + содержимое). Завершается строкой с одной точкой.QUIT- завершает сессию.
Расширенный SMTP (ESMTP, RFC 5321) добавляет команду EHLO вместо HELO и поддержку расширений: аутентификация (AUTH), шифрование (STARTTLS), указание размера сообщения (SIZE).
Порты SMTP
SMTP использует несколько портов, каждый для своей задачи:
- Порт 25 - стандартный порт для межсерверной пересылки (MTA-to-MTA). Большинство ISP блокируют порт 25 для домашних пользователей, чтобы ограничить спам.
- Порт 587 - порт для отправки почты клиентом (submission). Требует аутентификации и поддерживает STARTTLS. Это рекомендуемый порт для отправки через почтовый клиент.
- Порт 465 - SMTP over SSL (SMTPS). Долгое время считался устаревшим, но в 2018 году RFC 8314 вернул его как порт для implicit TLS.
Коды ответов
Каждый ответ сервера начинается с трёхзначного кода. Первая цифра определяет класс ответа:
- 2xx - успех. Код 250 означает, что команда выполнена.
- 3xx - промежуточный ответ. Код 354 - сервер ждёт данные после команды DATA.
- 4xx - временная ошибка. Код 421 - сервер временно недоступен, код 450 - ящик занят. Стоит повторить попытку позже.
- 5xx - постоянная ошибка. Код 550 - ящик не существует, код 553 - недопустимый адрес. Повторять бессмысленно.
Ограничения протокола
SMTP создавался в эпоху доверенных сетей. Отсюда ряд проблем, которые решаются внешними надстройками:
- Нет проверки отправителя. Любой сервер может указать любой адрес в MAIL FROM. Решение: SPF, DKIM, DMARC.
- Нет шифрования по умолчанию. Базовый SMTP передаёт данные открытым текстом. Решение: STARTTLS или implicit TLS на порту 465.
- Ограничение на размер. Многие серверы ограничивают размер сообщения (обычно 10-25 MB). Для больших вложений нужны другие механизмы.
SMTP и валидация email
SMTP-проверка (SMTP verification) использует протокол для валидации email-адресов. Валидатор подключается к серверу, выполняет EHLO и RCPT TO, но не отправляет само письмо. По ответу сервера (250 или 550) определяется, существует ли ящик. Это один из этапов многоуровневой верификации email.
uChecker использует SMTP-протокол как один из уровней валидации. Сервис подключается к MTA получателя, проверяет ответ сервера и комбинирует его с DNS-проверками, анализом домена и другими сигналами для точного результата.
