SPF, DKIM и DMARC: как настроить, чтобы письма сайта не попадали в спам

Коротко

SPF, DKIM и DMARC — три DNS-записи, по которым почтовые сервисы проверяют, что письмо от вашего домена отправил действительно вы. SPF перечисляет серверы, которым разрешено отправлять почту от имени домена. DKIM ставит на письмо цифровую подпись, которую получатель сверяет с открытым ключом в DNS. DMARC говорит получателю, что делать с письмами, которые не прошли проверку, и куда присылать отчёты.

Если хотя бы одной записи нет или она настроена неверно, письма с сайта и корпоративной почты чаще попадают в спам или не доходят вовсе. Настройка занимает от получаса до пары часов: нужно знать, откуда уходят письма, и иметь доступ к DNS домена.

ЗаписьГде в DNSПример значенияЧто проверяет
SPFTXT на самом доменеv=spf1 include:_spf.yandex.net ~allРазрешён ли сервер-отправитель
DKIMTXT на селектор._domainkeyv=DKIM1; k=rsa; p=ключПодпись письма и его неизменность
DMARCTXT на _dmarcv=DMARC1; p=none; rua=mailto:адресПолитика для непрошедших писем, отчёты

Основная мысль

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

Типичная ситуация: компания подключила почту на домене, почтовый сервис подсказал записи SPF и DKIM, их добавили. Сотрудники пишут клиентам без проблем. Но сайт отправляет заявки и письма о заказах со своего хостинга от адреса вида noreply@site.ru, а этого сервера в SPF нет, и подписи DKIM у таких писем нет. Для получателя это письма, которые подделывают ваш домен.

Поэтому настройка начинается с инвентаризации: откуда уходят письма от имени домена. Затем для каждого источника решается, как он проходит проверку, и только после этого включается строгая политика DMARC.

Второй момент — порядок. DMARC сразу с политикой reject при неполной настройке SPF и DKIM может заблокировать часть собственной почты. Безопасный путь — начать с p=none, посмотреть отчёты и ужесточать постепенно.

Как работают SPF, DKIM и DMARC

SPF: кто может отправлять

SPF-запись — это TXT-запись на домене, где перечислены разрешённые отправители: IP-адреса и ссылки на SPF-записи почтовых сервисов через include. Сервер получателя смотрит, с какого IP пришло письмо, и сверяет его со списком.

Окончание записи определяет, что делать с остальными отправителями: ~all — мягкий отказ, письмо помечается как подозрительное; -all — жёсткий отказ. На старте удобнее ~all, после проверки всех источников можно перейти на -all.

DKIM: подпись письма

DKIM — это цифровая подпись. Сервер-отправитель подписывает письмо закрытым ключом, а открытый ключ публикуется в DNS как TXT-запись на имени вида селектор._domainkey.site.ru. Получатель берёт ключ из DNS и проверяет, что письмо не изменили по дороге и что его подписал владелец домена.

Селектор нужен, чтобы у домена могло быть несколько ключей: один для корпоративной почты, другой для сервиса рассылок, третий для сайта.

DMARC: что делать с непрошедшими

DMARC связывает SPF и DKIM с адресом в поле «От кого». Письмо проходит DMARC, если прошла хотя бы одна из проверок и домен в ней совпадает с доменом отправителя. Запись публикуется на _dmarc.site.ru и задаёт политику:

  • p=none — ничего не делать, только присылать отчёты;
  • p=quarantine — помещать непрошедшие письма в спам;
  • p=reject — отклонять их.

Параметр rua задаёт адрес для агрегированных отчётов, по которым видно, кто и сколько писем отправляет от имени вашего домена.

Домены и поддомены, которые не отправляют почту

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

v=spf1 -all
v=DMARC1; p=reject

Первая запись публикуется как TXT на домене, вторая — как TXT на _dmarc этого домена.

Зачем нужны SPF и DKIM одновременно

SPF и DKIM проверяют разное. SPF ломается при пересылке: письмо переслали, и оно приходит уже с другого сервера. DKIM переживает пересылку, если письмо не изменяли. Поэтому для надёжной доставки нужны обе записи, а DMARC использует любую из прошедших.

Настроить DKIM и SPF: пошагово

Шаг 1. Найдите все источники писем

Составьте список того, что отправляет письма от имени вашего домена:

  1. Корпоративная почта: Яндекс 360, почта Mail или другой сервис.
  2. Сайт: заявки, письма о заказах, восстановление пароля.
  3. CRM: письма клиентам из карточки сделки.
  4. Сервис рассылок.
  5. Бухгалтерская или учётная система, если она отправляет счета.

Если почта на домене ещё не подключена, сначала сделайте это — порядок описан в статье о почте на своём домене.

Шаг 2. Соберите SPF-запись

У домена может быть только одна SPF-запись. Все источники объединяются в неё:

v=spf1 include:_spf.yandex.net ip4:203.0.113.10 ~all

Здесь include:_spf.yandex.net разрешает отправку через Яндекс 360, а ip4:203.0.113.10 — через сервер сайта. Для почты Mail используется include:_spf.mail.ru, для других сервисов — значение из их документации. Вместо 203.0.113.10 укажите IP своего сервера.

Ограничение SPF — не более десяти DNS-запросов при проверке. Каждый include и каждый вложенный include считаются. Если сервисов много, запись может превысить лимит, и тогда проверка завершится ошибкой.

Шаг 3. Добавьте DKIM

Ключ DKIM генерирует тот, кто отправляет письма. Для корпоративной почты его выдаёт почтовый сервис в панели администратора: там указаны имя записи и значение. Например, для Яндекс 360 запись создаётся на имени mail._domainkey, а значение копируется из панели.

mail._domainkey.site.ru.  TXT  "v=DKIM1; k=rsa; p=MIIBIjANBgkq..."

Сервис рассылок и CRM выдают свои ключи со своими селекторами. Для сайта DKIM либо настраивается на хостинге, если хостинг это поддерживает, либо сайт отправляет письма через SMTP почтового сервиса и получает его подпись.

Сценарий: сервис рассылок

Компания отправляет новости клиентам через сервис email-рассылок от адреса news@site.ru. По умолчанию сервис подписывает письма своим доменом и отправляет их со своих серверов. SPF проверяется по техническому адресу возврата, который принадлежит сервису, а DKIM — по его домену. Формально обе проверки проходят, но ни одна не совпадает с site.ru, поэтому DMARC для таких писем не пройдёт.

Решение — подключить в сервисе рассылок свой домен: добавить в DNS выданную сервисом DKIM-запись с его селектором и, если сервис предлагает, настроить свой домен для адреса возврата. После этого подпись будет от site.ru, и DMARC засчитает её.

Шаг 4. Включите DMARC в режиме наблюдения

_dmarc.site.ru.  TXT  "v=DMARC1; p=none; rua=mailto:dmarc@site.ru"

В режиме p=none письма не блокируются, но крупные почтовые сервисы начинают присылать отчёты. Для отчётов лучше завести отдельный ящик: их много, и они приходят в виде XML-архивов.

Шаг 5. Ужесточите политику

Когда отчёты показывают, что все ваши источники проходят проверку, переведите политику на p=quarantine, а затем, если нужно, на p=reject. Обычно между этапами проходит несколько недель наблюдения.

Настройки SPF и DKIM для писем с сайта

Почему письма с сайта уходят в спам

По умолчанию WordPress и 1С-Битрикс отправляют письма функцией PHP mail() с сервера хостинга. Такие письма уходят с IP хостинга, часто без подписи DKIM, иногда от адреса вида wordpress@site.ru или от технического адреса хостинга. Если этого IP нет в SPF, а подписи нет, DMARC не пройдёт. Подробнее о причинах недоставки — в статье «Не приходят письма с сайта».

Вариант 1. Отправка через SMTP почтового сервиса

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

Для WordPress это делается SMTP-плагином: в нём указывают сервер, порт, шифрование, логин и пароль приложения. Для Яндекс 360 это smtp.yandex.ru, порт 465 с SSL, для Mail — smtp.mail.ru, порт 465. Адрес отправителя в настройках плагина должен совпадать с ящиком, через который идёт отправка. Как собрать форму, заявки из которой доходят, описано в статье о форме обратной связи на WordPress.

В 1С-Битрикс способ зависит от версии и сервера: SMTP настраивают средствами самого продукта, если версия это поддерживает, или на уровне сервера — на виртуальной машине Битрикс для этого есть настройки почты. Проверьте, какой вариант доступен на вашем проекте.

Вариант 2. Отправка с хостинга

Если письма уходят с хостинга, добавьте IP сервера в SPF и включите DKIM-подпись на хостинге, если он это поддерживает. У виртуальных хостингов IP часто общий с другими сайтами, и его репутация от вас не зависит. Поэтому для важных писем SMTP почтового сервиса предпочтительнее.

Адрес отправителя и адрес для ответа

В письмах с формы сайта в поле «От кого» должен стоять адрес вашего домена, например noreply@site.ru или info@site.ru. Частая ошибка — подставлять в «От кого» e-mail посетителя, который заполнил форму: письмо от имени чужого домена с вашего сервера не пройдёт SPF и DMARC этого домена. Адрес посетителя ставят в поле Reply-To, чтобы менеджер мог ответить одним нажатием.

Сравнение вариантов

СпособSPFDKIMНадёжность
mail() с общего хостингаНужно добавить IP хостингаЗависит от хостингаНизкая
mail() с собственного сервераДобавить IP сервераНастроить на сервереСредняя, зависит от настройки
SMTP почтового сервисаУже есть в include сервисаПодпись сервисаВысокая
Сервис транзакционных писемinclude сервисаКлюч сервисаВысокая

Сценарий: письма о заказах в магазине

Интернет-магазин на WooCommerce отправляет клиенту письмо о заказе, а менеджеру — уведомление. Письма уходят с хостинга функцией mail() от адреса, указанного в настройках магазина. Клиенты жалуются, что подтверждения не приходят, а менеджер находит уведомления в спаме.

После подключения SMTP-плагина с отправкой через корпоративный ящик и проверки, что адрес отправителя в настройках магазина совпадает с этим ящиком, письма получают подпись почтового сервиса. В заголовках тестового заказа появляются spf=pass, dkim=pass и dmarc=pass.

Сценарий: сменили хостинг

Сайт переехал на новый сервер, и письма о заказах перестали доходить. Причина: в SPF остался IP старого хостинга, а новый не добавлен. При переносе сайта на другой хостинг SPF и DKIM нужно проверять так же, как A-записи домена.

Проверка DKIM, SPF и DMARC

Проверить через DNS

Посмотреть, что опубликовано в DNS, можно командой dig или nslookup:

dig TXT site.ru +short
dig TXT mail._domainkey.site.ru +short
dig TXT _dmarc.site.ru +short

На Windows аналог — nslookup -type=TXT site.ru. Изменения в DNS применяются не мгновенно: в зависимости от TTL записи нужно подождать от нескольких минут до нескольких часов.

Проверить по заголовкам письма

Самый наглядный способ проверить SPF, DKIM и DMARC — отправить письмо себе на ящик в крупном почтовом сервисе и открыть его служебные заголовки. В Gmail это пункт «Показать оригинал», в других почтовых сервисах — просмотр свойств или заголовков письма. Ищите строку Authentication-Results:

spf=pass
dkim=pass header.d=site.ru
dmarc=pass

Если в строке DKIM указан домен сервиса, а не ваш, подпись не выровнена с вашим доменом, и для DMARC она не засчитается.

Онлайн-сервисы

Для проверки DKIM и SPF есть онлайн-сервисы: одни проверяют DNS-записи домена, другие выдают адрес, на который нужно отправить письмо, и показывают подробный отчёт о прохождении проверок, заголовках и содержимом. Отправьте тестовое письмо и с корпоративного ящика, и с сайта, например через форму заявки или восстановление пароля. Письма восстановления пароля — хороший тест: если они не доходят, владелец рискует остаться без доступа к сайту, и тогда пригодятся обходные способы из статьи о том, как зайти в админку WordPress.

Отчёты DMARC: как читать

Что приходит

После публикации записи DMARC с параметром rua почтовые сервисы начинают присылать агрегированные отчёты — обычно раз в сутки. Это XML-файлы в архиве, где указано, с каких IP-адресов приходили письма от имени вашего домена, сколько их было и прошли ли они SPF и DKIM.

Как использовать

Читать XML вручную неудобно, поэтому отчёты загружают в сервисы-анализаторы или разбирают скриптом. Смотреть нужно на три вещи:

  1. Все ли ваши источники проходят проверку. Если IP сервера сайта или сервиса рассылок стабильно не проходит SPF или DKIM, его нужно донастроить.
  2. Есть ли неизвестные отправители. Письма с чужих IP от имени вашего домена — это либо забытый сервис, либо попытка подделки.
  3. Сколько писем пройдёт при ужесточении политики. Если все свои источники проходят, можно переходить на quarantine.

Отчёты — единственный способ увидеть почту домена со стороны получателей. Без них ужесточение политики DMARC — действие вслепую.

Где добавить записи в DNS

Кто управляет DNS

Записи добавляют там, где обслуживается DNS домена: у регистратора, у хостинга или в стороннем DNS-сервисе. Понять это можно по NS-записям домена. Если вы уже подтверждали права на сайт через TXT-запись, например при добавлении сайта в Яндекс Вебмастер, это то же место.

Как добавить

  1. Откройте управление DNS-зоной домена.
  2. Добавьте запись типа TXT.
  3. В поле имени укажите @ или оставьте пустым для SPF, имя селектора с ._domainkey для DKIM, _dmarc для DMARC. Формат имени зависит от панели: где-то нужно полное имя с доменом, где-то только поддомен.
  4. Вставьте значение без лишних пробелов и переносов.
  5. Сохраните и проверьте запись через dig через некоторое время.

Длинные ключи DKIM некоторые панели разбивают на части — это нормально, если части склеиваются без пробелов.

Типичные ошибки

Что ломает доставку

  • Две SPF-записи. Добавили новую запись вместо того, чтобы дописать include в существующую. Проверка SPF завершается ошибкой.
  • Превышен лимит запросов SPF. Слишком много include, запись не обрабатывается.
  • Забыт сайт или CRM. Корпоративная почта проходит, письма о заказах — нет.
  • DKIM с чужим доменом. Сервис рассылок подписывает своим доменом, DMARC не проходит.
  • Сразу p=reject. Часть своих писем начинают отклонять, а отчёты никто не смотрит.
  • Опечатка в значении. Лишний пробел, кавычка, перенос строки в ключе DKIM.
  • Старый IP в SPF после переезда. Письма с нового сервера перестают проходить.

Чек-лист настройки

  • Составлен список всех источников писем от имени домена.
  • Одна SPF-запись со всеми источниками, не больше десяти DNS-запросов.
  • DKIM настроен для корпоративной почты, сайта, CRM и рассылок.
  • DMARC опубликован, отчёты приходят в отдельный ящик.
  • Сайт отправляет письма через SMTP почтового сервиса или с сервера, внесённого в SPF, с подписью DKIM.
  • В заголовках тестовых писем spf=pass, dkim=pass, dmarc=pass.
  • После нескольких недель отчётов политика DMARC ужесточена.
  • При смене хостинга или почтового сервиса записи обновляются.

Частые вопросы

Что такое SPF, DKIM и DMARC простыми словами?

SPF — список разрешённых отправителей, DKIM — подпись письма, DMARC — правило, что делать, если проверки не пройдены, и куда присылать отчёты.

Обязательно ли настраивать все три записи?

Для надёжной доставки — да. Крупные почтовые сервисы ужесточили требования к отправителям, и письма без SPF, DKIM и DMARC чаще попадают в спам.

Где взять SPF-запись и DKIM для корпоративной почты?

В панели администратора почтового сервиса. Там указаны значение SPF для include, имя записи DKIM с селектором и сам ключ.

Можно ли сделать две SPF-записи для разных сервисов?

Нет. Запись должна быть одна, все сервисы объединяются в ней через include и ip4.

Как проверить SPF, DKIM и DMARC одним способом?

Отправьте письмо на ящик в крупном почтовом сервисе и посмотрите заголовок Authentication-Results: в нём видны результаты всех трёх проверок.

Почему DKIM проходит, а DMARC нет?

Скорее всего, подпись сделана доменом сервиса, а не вашим. Настройте в сервисе подпись своим доменом с отдельным селектором.

Можно ли настроить DKIM для WordPress без SMTP?

Можно, если подпись DKIM поддерживает хостинг или сервер, с которого уходят письма. Но на общем хостинге это не всегда доступно, поэтому отправка через SMTP почтового сервиса обычно проще и надёжнее.

Сколько ждать после изменения DNS?

От нескольких минут до нескольких часов, в зависимости от TTL записи и кэша DNS-серверов.

Нужна ли PTR-запись?

Если письма отправляются с собственного сервера, да: обратная DNS-запись для IP сервера должна указывать на имя, которое разрешается обратно в этот IP. Её настраивает владелец IP — хостинг или провайдер. При отправке через почтовый сервис это не ваша забота.

Какую политику DMARC выбрать?

Начните с p=none, изучите отчёты, затем переходите на p=quarantine и при необходимости на p=reject.

Влияет ли SPF и DKIM на письма с формы сайта?

Да. Если сайт отправляет письма от адреса вашего домена, они проходят те же проверки, что и корпоративная почта.

Итог

Настройка SPF, DKIM и DMARC — это не три записи из инструкции почтового сервиса, а описание всех источников писем домена. Сначала составьте список отправителей, соберите одну SPF-запись, добавьте DKIM для каждого источника, включите DMARC в режиме наблюдения и ужесточайте политику по отчётам.

Для писем с сайта надёжнее всего отправка через SMTP корпоративной почты: письма получают SPF и DKIM сервиса и доходят так же, как письма сотрудников. После любых изменений проверяйте заголовки тестовых писем.

Если письма с сайта уходят в спам или вы не уверены, что записи настроены правильно, я как частный разработчик проверю DNS, настрою SPF, DKIM и DMARC и переведу отправку писем сайта на WordPress или 1С-Битрикс на SMTP. Работаю напрямую, без посредников — подробнее на странице доработки сайтов на WordPress.

Что будем искать? Например,Продвижение