Email-заголовки: что скрыто за каждым письмом
Марк АвриловОпубликовано обновлено
Любое письмо состоит из двух частей: заголовков и тела. Тело это то, что вы читаете: текст, HTML, вложения. Заголовки это метаданные, которые управляют маршрутизацией, отображением, аутентификацией и обработкой письма. Большинство почтовых клиентов прячет их по умолчанию, показывая только From, To, Date и Subject. А в полном блоке обычно от 15 до 40 полей, и в них записана вся жизнь письма от создания до доставки.
Формат заголовка
Синтаксис заголовков описан в RFC 5322 и он простой. Каждый заголовок это одна логическая строка вида:
Header-Name: header value
Если значение слишком длинное, оно продолжается на следующей строке, начинающейся с пробела (это называется folding). От тела письма заголовки отделяются одной пустой строкой. Для части полей порядок важен (Received читаются снизу вверх), но большинство может идти в любом порядке.
Основные заголовки
Заголовки email делятся на несколько функциональных групп. Первая группа - адресные заголовки, определяющие отправителя и получателя.
- From. Адрес отправителя, который видит получатель. Это заголовок уровня сообщения, а не envelope. Его может задать кто угодно, поэтому он легко подделывается. DMARC существует именно для защиты этого поля.
- To. Адрес получателя. Может содержать несколько адресов через запятую. Не обязательно совпадает с фактическим получателем envelope (RCPT TO в SMTP-сессии).
- Reply-To. Адрес, на который клиент направит ответ. Если Reply-To не задан, ответ идёт на адрес из From. Рассылки часто используют Reply-To для перенаправления ответов на support-адрес.
- Cc и Bcc. Carbon copy и blind carbon copy. Cc виден всем получателям, Bcc скрыт. На уровне SMTP обе категории - просто дополнительные RCPT TO.
Заголовки маршрутизации
Вторая группа отвечает за то, как письмо дошло до получателя.
- Received. Каждый сервер, через который прошло письмо, добавляет свой Received-заголовок в начало блока. Читая их снизу вверх, можно восстановить полный маршрут сообщения. Это основной инструмент диагностики проблем с доставкой.
- Return-Path. Устанавливается принимающим сервером на основе MAIL FROM из SMTP-сессии. Именно на этот адрес отправляются bounce-уведомления. SPF проверяет домен из Return-Path.
- Message-ID. Уникальный идентификатор сообщения, формируемый отправляющим MTA. Используется для дедупликации, ссылок между сообщениями (In-Reply-To, References) и отладки.
Заголовки аутентификации
Третья группа появилась как ответ на проблему подделки отправителя.
- DKIM-Signature. Содержит криптографическую подпись, покрывающую выбранные заголовки и тело письма. Принимающий сервер проверяет подпись через публичный ключ в DNS отправителя.
- Authentication-Results. Добавляется принимающим сервером. Содержит результаты проверок SPF, DKIM и DMARC для данного сообщения. Формат стандартизирован в RFC 8601.
- ARC-Authentication-Results. Часть протокола ARC (Authenticated Received Chain). Сохраняет результаты аутентификации при пересылке, чтобы конечный получатель мог увидеть, что письмо прошло проверки до того, как было переслано.
Заголовки контента
Четвёртая группа описывает содержимое письма.
- Subject. Тема письма. Единственный контентный заголовок, который всегда виден в интерфейсе.
- Content-Type. MIME-тип содержимого: text/plain, text/html, multipart/alternative. Для писем с вложениями используется multipart/mixed.
- Content-Transfer-Encoding. Кодировка тела: 7bit, quoted-printable, base64. Определяет, как бинарные данные представлены в текстовом формате SMTP.
- MIME-Version. Практически всегда "1.0". Указывает, что письмо использует MIME-стандарт.
Заголовки для рассылок
Отдельная категория заголовков относится к массовым рассылкам.
- List-Unsubscribe. Ссылка для отписки. С 2024 года обязателен для массовых отправителей по требованиям Gmail и Yahoo.
- List-Unsubscribe-Post. Дополнение к List-Unsubscribe для механизма one-click отписки (RFC 8058).
- Precedence. Указывает приоритет сообщения. Значение "bulk" сигнализирует, что это массовая рассылка. Некоторые серверы используют этот заголовок для приоритизации очереди.
- Feedback-ID. Используется Google для агрегированной статистики по кампаниям в Postmaster Tools.
Конверт и заголовки: в чём разница
Принципиальное различие, которое часто путают: email имеет два уровня адресации. Envelope-адреса (MAIL FROM и RCPT TO) передаются в SMTP-сессии и управляют фактической доставкой. Header-адреса (From, To) записаны в теле сообщения и отображаются в клиенте.
Они могут не совпадать. Рассылка от company.com может использовать envelope sender bounce-12345@tracking.company.com для обработки bounces, а в заголовке From показывать newsletter@company.com. Это нормальная и допустимая практика, если SPF и DKIM настроены для обоих доменов.
Как посмотреть заголовки
В Gmail: откройте письмо, нажмите три точки справа, выберите "Показать оригинал". В Outlook: откройте письмо, File → Properties → Internet Headers. В Thunderbird: View → Message Source. Полный текст заголовков покажет весь маршрут, результаты аутентификации и служебные метки.
uChecker работает на уровне DNS и SMTP - тех же протоколов, которые формируют заголовки вашего письма. Проверка адресов до отправки означает, что заголовки Received не будут содержать записей об отклонённых сообщениях, а bounce-обработчик останется без работы.
Марк Аврилов · Автор материала
Опубликовано Обновлено
