Письма с вашего домена уходят в спам: SPF, DKIM и DMARC по порядку

9 минут

Счета не доходят, письма из формы теряются, клиент говорит «ничего не приходило» — а в почте всё отправлено. Чаще всего дело не в тексте письма и не в репутации сервера, а в трёх записях DNS, которые никто не завёл: SPF, DKIM и DMARC.

Что происходит с письмом на той стороне

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

Ключевая деталь, из-за которой обычно и возникает путаница: у письма два отправителя. Есть адрес на конверте, которым обмениваются серверы, и есть видимое поле «От кого», которое читает человек. SPF проверяет только конверт. Подставить в видимое поле любой адрес можно независимо от того, настроен у вас SPF или нет, — именно поэтому одной записи мало, и именно это связывает воедино DMARC.

Ни одна из трёх записей не лежит на сайте: все три живут в DNS домена. Поэтому сайт может быть идеально настроен, а почта — сползать в спам, и наоборот.

SPF: кому вообще можно слать почту от вашего домена

SPF — это TXT-запись на домене со списком серверов, которым разрешено отправлять письма от вашего имени. Выглядит она примерно так:

Типичная запись SPF
v=spf1 include:_spf.your-provider.ru ip4:203.0.113.10 -all

Читается слева направо: разрешить серверам почтового провайдера, разрешить конкретному адресу, всем остальным — отказать. Последняя директива и есть самое важное место записи. -all означает «остальным нельзя», ~all — «остальные подозрительны, но пропустите». Мягкий вариант удобен на время настройки, но он остаётся в записях годами, и защита из строгой превращается в рекомендательную.

Четыре ошибки, которые встречаются чаще остальных:

  • Две записи SPF на одном домене. Так бывает, когда подключают второй сервис и добавляют ещё одну строку рядом. По стандарту запись должна быть одна: увидев две, принимающая сторона считает проверку несостоявшейся — то есть хуже, чем если бы SPF не было вовсе. Несколько отправителей объединяются в одну запись через несколько include.
  • Больше десяти обращений к DNS. Каждый include — это запрос, и вложенные записи провайдеров тянут за собой свои. Лимит в стандарте — десять; при его превышении проверка обрывается с ошибкой, о которой вам никто не сообщит.
  • Забытый отправитель. Рассылочный сервис, CRM, а чаще всего сам сайт: форма обратной связи отправляет письма с адреса на вашем домене прямо с хостинга, а в SPF этого хостинга нет.
  • Старый адрес после переезда. Запись продолжает разрешать отправку с сервера, которым вы уже не пользуетесь. Подробный разбор — в статье о переезде на российский хостинг.

DKIM: подпись, которая переживает пересылку

DKIM — электронная подпись, которую почтовый сервер ставит на каждое исходящее письмо. Закрытый ключ остаётся у провайдера, открытая часть лежит в DNS по адресу вида selector._domainkey.example.ru, где селектор выдаёт сам провайдер. Получатель берёт открытый ключ, проверяет подпись — и знает, что письмо действительно ваше и текст не меняли по дороге.

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

Проверить DKIM снаружи можно только наполовину, и об этом честно стоит знать: селектор придумывает провайдер, перечислить все возможные нельзя. Поэтому и наша проверка, и любой другой внешний инструмент перебирают распространённые селекторы — и говорят «по типовым селекторам ключ не нашёлся», а не «у вас нет DKIM». Свой селектор смотрите в панели почтового сервиса, там же он и включается: провайдер выдаёт готовую TXT-запись, её остаётся добавить в DNS.

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

DMARC — запись на поддомене _dmarc, которая делает две вещи. Во-первых, требует, чтобы домен из проверенных SPF или DKIM совпадал с видимым полем «От кого» — тем самым, которое читает клиент. Во-вторых, говорит почтовым службам, как поступать с письмами, которые проверку не прошли.

Запись DMARC
v=DMARC1; p=quarantine; rua=mailto:dmarc@example.ru

Политика принимает три значения: none — ничего не делать, только присылать отчёты; quarantine — класть в спам; reject — не доставлять вовсе. Отдельно стоит сказать про первое: p=none ничего не защищает. Это режим наблюдения, и подделанное письмо от вашего домена при нём по-прежнему попадает клиенту во «Входящие». Запись есть, галочка стоит, эффекта нет — самая частая ситуация из тех, что мы видим в отчётах.

Правильный порядок внедрения — тремя шагами, а не одним:

  1. p=none и адрес для отчётов в rua. Две-три недели почтовые службы присылают сводки: кто и от вашего имени отправлял почту.
  2. Читаете отчёты и убеждаетесь, что вся своя почта проверку проходит: сайт, CRM, рассылки, бухгалтерия. Всё, что не проходит, — либо чинится, либо добавляется в SPF и подписывается.
  3. quarantine, а через некоторое время reject.

Прыгать сразу в reject — это не «сделать строго», а выстрелить себе в ногу: неучтённый отправитель просто перестанет доставлять письма, причём молча и для всех сразу.

Где это ломается на практике

Домен, с которого не пишут. Ему записи нужны не меньше, чем рабочему: домен без SPF и DMARC — удобная площадка для рассылки от вашего имени, и претензии за такой фишинг придут вам. Настройка простая и разовая: v=spf1 -all и DMARC с политикой reject.

Поддомены. SPF на example.ru не покрывает mail.example.ru — у каждого имени своя запись. DMARC, наоборот, распространяется на поддомены и умеет задавать им отдельную политику директивой sp=. Про забытые поддомены вообще стоит помнить отдельно — они всплывают и в других проверках, см. разбор перед запуском.

Подключили рассылочный сервис. Классический сценарий: сервис добавили, SPF не тронули, DKIM не включили — и первая же массовая рассылка уезжает в спам целиком, заодно портя репутацию домена для обычной переписки.

Записи пропали. Смена регистратора, перенос зоны, «почистили лишнее» — и SPF с DMARC исчезли. Внешне ничего не происходит: сайт открывается, письма уходят. Замечают такое через недели, по жалобам клиентов. Ежедневная проверка домена ловит это на следующий день — в том числе поэтому в подписке проверка повторяется сама и показывает, что изменилось со вчера.

Как проверить свой домен

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

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

Что спросить у DNS
dig +short TXT example.ru
dig +short TXT _dmarc.example.ru
dig +short MX example.ru

В ответе на первую команду должна быть ровно одна строка, начинающаяся с v=spf1, и заканчиваться она должна на -all. На вторую — строка с v=DMARC1 и политикой строже, чем p=none. На третью — почтовый сервис, которым вы пользуетесь сейчас, а не тот, что был до переезда. В Windows то же самое делает nslookup -type=txt example.ru.

DKIM проверяется той же командой, но по своему адресу — подставьте селектор из настроек почтового сервиса:

Проверка DKIM по своему селектору
dig +short TXT selector._domainkey.example.ru

Три записи настраиваются за полчаса и один раз. Дальше остаётся следить, что они на месте: исчезают они тихо, а замечаются по фразе клиента «мы ничего не получали».

Проверьте всё это одной командой

Введите адрес — получите разбор с оценкой риска и объяснением каждой находки. Бесплатно и без регистрации.

Проверить сайт

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

Настроил SPF, а письма всё равно попадают в спам. Почему?

SPF отвечает только на вопрос «с того ли сервера пришло письмо» и ломается на пересылке: когда письмо пересылают или оно идёт через список рассылки, отправляющий сервер меняется, и проверка перестаёт проходить. Поэтому одного SPF мало — нужна подпись DKIM, которая переживает пересылку, и запись DMARC, которая связывает проверки с видимым адресом отправителя. Кроме того, SPF молча становится недействительным, если записей на домене две или если в цепочке include набирается больше десяти обращений к DNS.

Чем DKIM отличается от SPF и нужен ли он, если SPF уже есть?

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

Можно ли сразу поставить DMARC в p=reject?

Можно, но рискованно: reject означает «не доставлять вовсе», и если какой-то ваш сервис (сайт с формой, CRM, рассылочный сервис) не учтён в SPF и не подписывает письма, его почта перестанет доходить совсем. Правильный порядок — начать с p=none, две-три недели почитать отчёты, которые придут на адрес из rua, убедиться, что вся настоящая почта проходит проверку, и только потом переводить политику в quarantine, а затем в reject.

С домена вообще не отправляют письма. Нужны ли ему SPF и DMARC?

Да, и даже больше, чем отправляющему. Домен без записей — удобная площадка для рассылки от вашего имени: получатель не может отличить подделку от настоящего письма. Для неотправляющего домена настройка простая и жёсткая: SPF, который не разрешает никому («v=spf1 -all»), и DMARC с политикой reject. Это делается один раз и закрывает вопрос.

Как проверить, что записи на месте, не заходя в консоль?

Введите адрес сайта в проверку на главной: она смотрит SPF по домену и его апексу, DMARC на поддомене _dmarc, отмечает отдельно случай p=none, ищет DKIM по распространённым селекторам и заодно показывает MX и почтового провайдера. Отчёт по этим пунктам бесплатный и без регистрации. Если хочется руками — те же записи видны через dig или nslookup, команды есть в статье.