SMTP

SMTP (Simple Mail Transfer Protocol, RFC 5321, старт 1982) — протокол доставки почты. Работает от клиента к серверу (submission) и сервер к серверу (relay). Один из самых старых интернет-протоколов, до сих пор в широком использовании.

Порты и режимы

ПортНазначениеШифрование
25MTA↔MTA (relay между серверами)STARTTLS опционально
587Submission (клиент отдаёт своему серверу)STARTTLS + AUTH обязательно
465SMTPS (implicit TLS)TLS сразу

Порт 25 в исходящем направлении часто блокируется провайдерами — от спама. Клиенты пишут через 587.

Пример SMTP-сессии

S: 220 mail.example.com ESMTP Postfix
C: EHLO client.example.com
S: 250-mail.example.com Hello
S: 250-STARTTLS
S: 250-AUTH LOGIN PLAIN
S: 250 SIZE 52428800
C: STARTTLS
S: 220 Ready to start TLS
... TLS handshake ...
C: EHLO client.example.com
S: 250-mail.example.com Hello
S: 250 AUTH LOGIN PLAIN
C: AUTH LOGIN
... login/password ...
S: 235 Authentication successful
C: MAIL FROM: <alice@example.com>
S: 250 OK
C: RCPT TO: <bob@example.org>
S: 250 OK
C: DATA
S: 354 End data with <CRLF>.<CRLF>
C: From: Alice <alice@example.com>
C: To: Bob <bob@example.org>
C: Subject: Hello
C:
C: Hi Bob!
C: .
S: 250 OK: queued as XYZ
C: QUIT
S: 221 Bye

Ключевые команды

Envelope vs Header

Важно понимать: MAIL FROM / RCPT TO — это envelope (конверт), они видны только серверам. А From: / To: внутри DATA — это headers (в письме, видны получателю). Они могут отличаться (типичный кейс — BCC, mailing lists).

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

ExtensionЧто даёт
SIZEОграничение размера
PIPELININGБатчинг команд
DSNDelivery Status Notification
8BITMIME8-битный текст без base64
BINARYMIMEБинарные вложения без кодирования
CHUNKINGПередача чанками (BDAT)
STARTTLSTLS-апгрейд
AUTHАутентификация
SMTPUTF8UTF-8 в адресах (для IDN)

Проблемы SMTP

См. также