Как работает электронная почта: путь письма от отправителя к получателю

Как работает электронная почта: путь письма от отправителя к получателю Полезное

Электронная почта (email) — это система обмена текстовыми сообщениями между пользователями через компьютерные сети, где письмо проходит цепочку серверов от отправителя к получателю по стандартным протоколам. Это не одна программа, а связка из адреса, почтовых агентов и протоколов.

Ниже разберем адрес и участников доставки (MUA, MTA, MDA), различие протоколов отправки и получения (SMTP против IMAP и POP3), роль DNS-записи MX и защиту от подделки писем (SPF, DKIM, DMARC). В центре — пошаговая схема пути письма.

Мини-словарь: что не путать

У темы есть группа близких понятий, которые легко смешать. Развожу их сразу, дальше держу это различие:

  • MUA — почтовый клиент, которым пользуется человек (Thunderbird, веб-интерфейс Gmail).
  • MTA — сервер, который пересылает письмо между доменами по SMTP (Postfix, Exim).
  • MDA — компонент, который кладет доставленное письмо в ящик получателя.
  • SMTP — протокол отправки и пересылки писем (push).
  • IMAP / POP3 — протоколы получения писем клиентом с сервера (pull).

Адрес электронной почты

Адрес состоит из двух частей, разделенных символом @: локальная часть до @ и домен после. В bob@example.com локальная часть bob идентифицирует ящик, а example.com — домен, обслуживающий почту.

Локальную часть трактует принимающий сервер: он решает, куда положить письмо. Домен нужен отправляющей стороне, чтобы через DNS найти сервер получателя. Домен в адресе — это не имя конкретной машины, а точка входа: за него могут отвечать несколько серверов.

Кто участвует в доставке: MUA, MTA, MDA

Письмо обрабатывает не одна программа, а несколько агентов, у каждого своя роль.

MUA (Mail User Agent) — клиент, где человек пишет и читает письма. Он не общается с чужими серверами напрямую: свое письмо он сдает первому серверу.

MTA (Mail Transfer Agent) — сервер пересылки. Он принимает письмо, находит сервер домена получателя и передает письмо дальше по SMTP, при необходимости через промежуточные релеи.

MDA (Mail Delivery Agent) — финальный компонент на стороне получателя: раскладывает принятое письмо в конкретный почтовый ящик (например, в формат Maildir).

Уточнение к упрощению: приемом исходящего письма от клиента часто занимается отдельная роль MSA (Mail Submission Agent) на порту 587. В небольших системах MSA и MTA — один и тот же сервер, поэтому дальше для краткости говорю «MTA отправителя», подразумевая submission.

Протоколы: SMTP для отправки, IMAP и POP3 для получения

Ключевое различие: SMTP толкает письмо вперед (отправка и пересылка), а IMAP и POP3 забирают уже доставленные письма с сервера в клиент. Это разные задачи, их не взаимозаменяют.

IMAP и POP3 тоже различаются. IMAP держит письма и структуру папок на сервере и синхронизирует состояние между устройствами. POP3 в классическом режиме скачивает письма в один клиент, а на сервере по умолчанию их не оставляет (это поведение настраивается опцией «оставлять копию»).

Протокол Задача Направление Типовые порты Особенность
SMTP Отправка и пересылка Клиент -> сервер, сервер -> сервер 587 (submission), 25 (между MTA), 465 (implicit TLS) Не хранит и не показывает входящие
IMAP Получение Сервер -> клиент 143, 993 (TLS) Письма и папки живут на сервере, синхронизация устройств
POP3 Получение Сервер -> клиент 110, 995 (TLS) Скачивает письма, по умолчанию ориентирован на одно устройство

Практический вывод по выбору: несколько устройств и веб-доступ — IMAP; одно устройство и желание держать архив локально — POP3.

DNS и запись MX: как сервер находит получателя

Чтобы доставить письмо на example.com, MTA отправителя спрашивает у DNS запись MX (Mail Exchanger) этого домена. MX указывает имя почтового сервера и его приоритет числом: чем меньше число, тем выше приоритет.

dig MX example.com +short

Вывод (пример):

10 mail.example.com.
20 backup-mail.example.com.

Здесь основной сервер — mail.example.com (приоритет 10), а backup-mail.example.com (20) — резервный на случай недоступности основного. Имя из MX MTA дополнительно разрешает в IP через записи A/AAAA и подключается к нему.

Граница модели: если MX-записи у домена нет, стандарт SMTP (RFC 5321) разрешает доставку на адрес из записи A/AAAA самого домена (это называют неявным MX). Поэтому отсутствие MX не всегда означает, что почта не принимается.

Путь письма пошагово

Соберем участников в одну сквозную схему — от нажатия «Отправить» до появления письма у получателя.

[MUA отправителя]
   | SMTP submission, порт 587 (TLS + аутентификация)
[MTA отправителя]  --- запрос DNS MX домена получателя --->  DNS
   | SMTP, порт 25 (пересылка между серверами, возможны релеи)
[MTA получателя]
   | проверка SPF / DKIM / DMARC, антиспам-фильтры
[MDA]
   | раскладка в почтовый ящик
[ящик на сервере получателя]
   | IMAP, порт 993   или   POP3, порт 995
[MUA получателя]

Разбор по шагам:

  1. Пользователь пишет письмо в MUA и нажимает «Отправить».
  2. MUA сдает письмо своему серверу по SMTP submission (порт 587), с аутентификацией и шифрованием.
  3. MTA отправителя запрашивает у DNS MX-запись домена получателя и выбирает сервер с наибольшим приоритетом.
  4. MTA отправителя соединяется с MTA получателя по SMTP (порт 25) и передает письмо; на пути возможны промежуточные релеи.
  5. MTA получателя проверяет отправителя (SPF, DKIM, DMARC) и прогоняет письмо через антиспам.
  6. MDA раскладывает принятое письмо в почтовый ящик адресата.
  7. MUA получателя забирает письмо по IMAP (порт 993) или POP3 (порт 995) и показывает его.

Так выглядит диалог SMTP на шаге 4 (строки клиента помечены C:, сервера — S:):

S: 220 mail.example.com ESMTP Postfix
C: EHLO client.example.org
S: 250-mail.example.com
S: 250 STARTTLS
C: MAIL FROM:<alice@example.org>
S: 250 2.1.0 Ok
C: RCPT TO:<bob@example.com>
S: 250 2.1.5 Ok
C: DATA
S: 354 End data with <CR><LF>.<CR><LF>
C: From: alice@example.org
C: To: bob@example.com
C: Subject: Privet
C:
C: Tekst pisma.
C: .
S: 250 2.0.0 Ok: queued

Обратите внимание: адрес в MAIL FROM (конверт письма, он же Return-Path) и адрес в заголовке From:, который видит человек, — это разные поля. На этом различии строится проверка подлинности.

Защита от подделки: SPF, DKIM, DMARC

SMTP сам по себе не проверяет, что отправитель имеет право слать письма от имени домена. Поэтому поверх него работают три DNS-механизма. Их публикуют как TXT-записи в DNS домена-отправителя.

Механизм Что проверяет Где хранится Что дает
SPF IP отправляющего сервера против списка разрешенных для домена конверта (Return-Path) TXT в корне домена Отсекает рассылку с чужих серверов
DKIM Криптографическую подпись части заголовков и тела письма TXT в <селектор>._domainkey.<домен> Подтверждает домен-подписант и целостность письма
DMARC Согласование (alignment) результата SPF/DKIM с видимым заголовком From: и задает политику TXT в _dmarc.<домен> Говорит приемнику, что делать при провале, и куда слать отчеты

Примеры записей:

example.com.                 TXT  "v=spf1 ip4:203.0.113.10 include:_spf.provider.com -all"
sel1._domainkey.example.com. TXT  "v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3..."
_dmarc.example.com.          TXT  "v=DMARC1; p=quarantine; rua=mailto:dmarc@example.com; adkim=s; aspf=s"

Как читать: -all в SPF — жесткий запрет для не перечисленных серверов (~all — мягкий, помечать как подозрительное). В DKIM сервер подписывает письмо закрытым ключом, а приемник проверяет подпись открытым ключом из DNS. В DMARC p=quarantine — отправлять непрошедшие письма в спам (p=reject — отклонять, p=none — только наблюдать).

Важное различие: SPF проверяет домен из конверта (Return-Path), а DMARC требует, чтобы прошедший SPF или DKIM домен совпадал с видимым From:. Именно поэтому один SPF не защищает от подделки адреса в поле «От кого» — подделку закрывает связка с DMARC.

Безопасность почты

Транспорт защищают шифрованием TLS: implicit TLS (сразу зашифрованное соединение, например порт 993/995/465) или STARTTLS (переход на шифрование внутри уже открытого соединения). TLS закрывает канал, но не содержимое от самих серверов — для сквозного шифрования тела нужны отдельные средства (PGP или S/MIME).

Со стороны пользователя базовая гигиена: сложный уникальный пароль, двухфакторная аутентификация, отдельные пароли приложений для старых клиентов, недоверие к письмам, требующим срочно перейти по ссылке или ввести пароль. SPF/DKIM/DMARC снижают подделку адреса, но фишинг с похожего домена они не отменяют — адрес отправителя всегда стоит читать целиком.

Выводы

  • Электронная почта — это связка адреса, агентов (MUA, MTA, MDA) и протоколов, а не одна программа.
  • Отправку и пересылку выполняет SMTP; получение письма клиентом — IMAP (синхронизация на сервере) или POP3 (скачивание в один клиент).
  • Сервер отправителя находит сервер получателя через DNS-запись MX по приоритету; при отсутствии MX используется запись A/AAAA домена.
  • Путь письма: MUA -> SMTP submission -> MTA отправителя -> DNS MX -> SMTP порт 25 -> MTA получателя -> MDA -> ящик -> IMAP/POP3 -> MUA получателя.
  • Подделку отправителя ограничивают SPF (IP конверта), DKIM (подпись) и DMARC (согласование с видимым From и политика реакции).

Где применяется / связь с практикой

Понимание пути письма — базовый навык для тех, кто настраивает и обслуживает сети и серверы: DNS-записи MX, маршрутизация SMTP, порты и TLS, диагностика недоставки. Эти же темы (DNS, TCP-порты, протоколы прикладного уровня, защита трафика) — ядро работы сетевого инженера.

Освойте тему на практике

Разобраться в этом системно и на практике помогает курс Сетевой инженер: там сети и протоколы разбирают на стендах, а не только в теории. Оценить формат и уровень до старта можно на открытых уроках — бесплатных занятиях по сетям и инфраструктуре.

FAQ

Почему письмо ушло, но получатель его не видит?
Частая причина — фильтрация на стороне получателя: провал SPF/DKIM/DMARC или антиспам отправили письмо в спам либо отклонили. Стоит проверить DNS-записи домена отправителя и заголовки доставки (Received, Authentication-Results).

Можно ли отправить письмо без DNS-записи MX у получателя?
Да. По стандарту SMTP при отсутствии MX доставка идет на IP из записи A/AAAA домена (неявный MX). Но для надежной почты MX-запись все же настраивают явно.

В чем разница между портами 25, 587 и 465?
Порт 25 — для пересылки между серверами (MTA -> MTA). Порт 587 — для отправки письма клиентом с аутентификацией (submission). Порт 465 — тоже submission, но со сразу зашифрованным соединением (implicit TLS).

OTUS Журнал
Скидка 5% 14-20 сентября на курсы (popup)