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

ESMTP

ESMTP (Extended Simple Mail Transfer Protocol, расширенный протокол простой передачи почты) — это расширение базового протокола SMTP (Simple Mail Transfer Protocol), предназначенное для передачи электронной почты в компьютерных сетях. ESMTP определяет набор дополнительных команд и возможностей, которые не поддерживаются в исходной спецификации SMTP, и обеспечивает обратную совместимость с ним. Протокол описан в серии документов RFC (Request for Comments), в первую очередь в RFC 5321, который заменил более ранние RFC 821 (SMTP) и RFC 1869 (ESMTP).

История

Протокол SMTP был впервые определён в 1982 году в RFC 821. Он предоставлял базовый механизм для отправки почтовых сообщений между почтовыми серверами. Однако с ростом интернета и усложнением требований к электронной почте возникла необходимость в расширении функциональности. В 1995 году был опубликован RFC 1869, который формализовал механизм расширения SMTP, получивший название ESMTP. Этот документ ввёл концепцию объявления возможностей сервера через команду EHLO (Extended HELO) и механизм согласования дополнительных команд.

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

Отличие от SMTP

Основное отличие ESMTP от SMTP заключается в способе инициализации соединения и механизме согласования возможностей.

  • Команда HELO vs EHLO: В SMTP клиент начинает сессию с команды HELO, за которой следует доменное имя отправителя. В ESMTP клиент использует команду EHLO (Extended HELO). Если сервер поддерживает ESMTP, он отвечает на EHLO списком поддерживаемых расширений (команд). Если сервер не поддерживает ESMTP, он отвечает ошибкой, и клиент может переключиться на команду HELO для работы в режиме обычного SMTP.
  • Объявление возможностей: В ответ на EHLO сервер возвращает многострочный ответ, где каждая строка содержит одну из поддерживаемых команд расширения. Клиент, зная список возможностей, может использовать только те команды, которые поддерживаются сервером.
  • Обратная совместимость: ESMTP спроектирован так, чтобы быть полностью обратно совместимым с SMTP. Сервер, не поддерживающий ESMTP, корректно обработает команду EHLO, но ответит на неё кодом ошибки (обычно 500 или 502), после чего клиент может повторить попытку с HELO.

Команды и расширения ESMTP

ESMTP определяет механизм регистрации новых расширений, которые могут быть добавлены в протокол. Каждое расширение имеет уникальное имя и может вводить новые команды, параметры или изменять поведение существующих. Наиболее распространённые расширения включают:

AUTH (SMTP Authentication)

Расширение AUTH (RFC 4954) позволяет клиенту аутентифицироваться на сервере перед отправкой почты. Это необходимо для предотвращения несанкционированного использования почтового сервера (например, для рассылки спама). Команда AUTH поддерживает различные механизмы аутентификации, такие как LOGIN, PLAIN, CRAM-MD5, DIGEST-MD5 и другие. После успешной аутентификации сервер разрешает отправку почты от имени аутентифицированного пользователя.

STARTTLS

Расширение STARTTLS (RFC 3207) позволяет установить защищённое соединение (TLS/SSL) поверх существующего незащищённого TCP-соединения. После выполнения команды STARTTLS клиент и сервер переходят к шифрованному обмену данными, что защищает содержимое письма и учётные данные от перехвата. Это расширение является основой для безопасной передачи почты (SMTPS, хотя формально SMTPS — это отдельный протокол, использующий TLS с самого начала).

SIZE

Расширение SIZE (RFC 1870) позволяет клиенту указать размер сообщения в байтах перед его передачей. Сервер может заранее отклонить сообщение, если оно превышает максимально допустимый размер, что экономит трафик и время. Команда MAIL FROM может содержать параметр SIZE=<число>.

PIPELINING

Расширение PIPELINING (RFC 2920) позволяет клиенту отправлять несколько команд без ожидания ответа на каждую из них. Это ускоряет передачу сообщений, особенно при большом количестве получателей, так как уменьшает количество сетевых задержек (RTT). Сервер должен обрабатывать команды в порядке их получения и отправлять ответы соответственно.

DSN (Delivery Status Notification)

Расширение DSN (RFC 3461) позволяет запрашивать уведомления о доставке сообщения. Клиент может указать, какие именно уведомления он хочет получить (например, об успешной доставке, о недоставке, о задержке) и для каких получателей. Это реализуется через параметры RET, ENVID, NOTIFY и ORCPT в командах MAIL FROM и RCPT TO.

8BITMIME

Расширение 8BITMIME (RFC 6152) позволяет передавать сообщения, содержащие 8-битные символы (например, символы кириллицы или других не-ASCII кодировок), без необходимости кодирования в 7-битный формат (Base64 или Quoted-Printable). Это упрощает обработку и уменьшает размер сообщения. Сервер, поддерживающий это расширение, может принимать сообщения в 8-битной кодировке.

CHUNKING (BINARYMIME)

Расширение CHUNKING (RFC 3030) позволяет передавать большие сообщения по частям (чанкам). Это особенно полезно для передачи двоичных данных (например, вложений) без необходимости кодирования. Команда BDAT (Binary Data) используется для отправки каждого чанка, а завершение сообщения обозначается чанком нулевого размера.

SMTPUTF8

Расширение SMTPUTF8 (RFC 6531) позволяет использовать в адресах электронной почты и в заголовках сообщений символы Unicode (UTF-8), включая доменные имена на национальных языках (IDN). Это расширение необходимо для поддержки интернационализированных адресов (EAI).

Пример сессии ESMTP

Ниже приведён упрощённый пример диалога между клиентом (C) и сервером (S) с использованием ESMTP:

`` S: 220 mail.example.com ESMTP Postfix C: EHLO client.example.com S: 250-mail.example.com S: 250-PIPELINING S: 250-SIZE 10240000 S: 250-VRFY S: 250-ETRN S: 250-STARTTLS S: 250-AUTH LOGIN PLAIN S: 250-ENHANCEDSTATUSCODES S: 250-8BITMIME S: 250 DSN C: AUTH LOGIN S: 334 VXNlcm5hbWU6 C: dXNlcm5hbWU= S: 334 UGFzc3dvcmQ6 C: cGFzc3dvcmQ= S: 235 2.7.0 Authentication successful C: MAIL FROM:<[email protected]> SIZE=2048 S: 250 2.1.0 Ok C: RCPT TO:<[email protected]> S: 250 2.1.5 Ok C: DATA S: 354 End data with <CRLF>.<CRLF> C: (содержимое письма) C: . S: 250 2.0.0 Ok: queued as 12345 C: QUIT S: 221 2.0.0 Bye ``

Применение

ESMTP является основным протоколом для передачи почты между почтовыми серверами (MTA — Mail Transfer Agent) в интернете. Он также используется почтовыми клиентами (MUA — Mail User Agent) для отправки почты через сервер исходящей почты (SMTP-сервер). Практически все современные почтовые серверы (Postfix, Exim, Sendmail, Microsoft Exchange, Dovecot и др.) поддерживают ESMTP и его расширения.

Критика и ограничения

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

  • Сложность конфигурации: Для обеспечения безопасности и правильной работы требуется настройка множества параметров (аутентификация, шифрование, ограничения размера, антиспам-фильтры).
  • Спам: ESMTP, как и SMTP, не имеет встроенных механизмов защиты от спама. Борьба со спамом ведётся на уровне дополнительных расширений (например, SPF, DKIM, DMARC) и внешних фильтров.
  • Отсутствие гарантии доставки: Протокол не гарантирует, что письмо будет доставлено получателю. Он лишь гарантирует, что сообщение будет передано следующему почтовому серверу. Ошибки доставки могут возникнуть на любом этапе.
  • Устаревшие расширения: Некоторые расширения (например, VRFY, EXPN) считаются небезопасными и обычно отключены на серверах, так как могут быть использованы для сбора информации о пользователях.

Источники

  • RFC 5321 — Simple Mail Transfer Protocol
  • RFC 1869 — SMTP Service Extensions
  • RFC 4954 — SMTP Service Extension for Authentication
  • RFC 3207 — SMTP Service Extension for Secure SMTP over TLS
  • RFC 1870 — SMTP Service Extension for Message Size Declaration
  • RFC 2920 — SMTP Service Extension for Command Pipelining
  • RFC 3461 — Simple Mail Transfer Protocol (SMTP) Service Extension for Delivery Status Notifications (DSNs)
  • RFC 6152 — SMTP Service Extension for 8-bit MIME Transport
  • RFC 3030 — SMTP Service Extensions for Transmission of Large and Binary MIME Messages
  • RFC 6531 — SMTP Extension for Internationalized Email

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

На главную BFOmetr →