SMTP
SMTP (Simple Mail Transfer Protocol, RFC 5321, старт 1982) — протокол доставки почты. Работает от клиента к серверу (submission) и сервер к серверу (relay). Один из самых старых интернет-протоколов, до сих пор в широком использовании.
Порты и режимы
| Порт | Назначение | Шифрование |
|---|---|---|
| 25 | MTA↔MTA (relay между серверами) | STARTTLS опционально |
| 587 | Submission (клиент отдаёт своему серверу) | STARTTLS + AUTH обязательно |
| 465 | SMTPS (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
Ключевые команды
EHLO— представиться, узнать возможности сервера.STARTTLS— включить TLS поверх plain-текста.AUTH LOGIN / PLAIN / CRAM-MD5 / XOAUTH2— аутентификация.MAIL FROM— отправитель (envelope).RCPT TO— получатель.DATA— содержимое (заголовки + тело, MIME для вложений).RSET— сброс сессии.QUIT— закрытие.
Envelope vs Header
Важно понимать: MAIL FROM / RCPT TO — это envelope (конверт), они видны только серверам. А From: / To: внутри DATA — это headers (в письме, видны получателю). Они могут отличаться (типичный кейс — BCC, mailing lists).
Расширения (ESMTP)
| Extension | Что даёт |
|---|---|
| SIZE | Ограничение размера |
| PIPELINING | Батчинг команд |
| DSN | Delivery Status Notification |
| 8BITMIME | 8-битный текст без base64 |
| BINARYMIME | Бинарные вложения без кодирования |
| CHUNKING | Передача чанками (BDAT) |
| STARTTLS | TLS-апгрейд |
| AUTH | Аутентификация |
| SMTPUTF8 | UTF-8 в адресах (для IDN) |
Проблемы SMTP
- Отсутствие обязательной аутентификации отправителя — легко подделать From. Решают SPF/DKIM/DMARC.
- Store-and-forward — письмо может лежать на промежуточных серверах, кэшироваться, дублироваться.
- Отсутствие end-to-end гарантий — доставка «best effort».