SPF, DKIM и DMARC
Какие DNS-записи нужны, чтобы письма сервиса доходили до клиентов и не попадали в спам, как их добавить у регистратора и проверить.
Когда письмо приходит в Gmail или Яндекс Почту, почтовый сервер получателя проверяет: правда ли оно от вашего домена? Для этого он смотрит три DNS-записи домена: SPF, DKIM и DMARC. Нет записей — письмо попадёт в «Спам» или вовсе не дойдёт.
Записи добавляются один раз там, где управляются DNS вашего домена: у регистратора (REG.RU, Timeweb и другие), в Cloudflare или в Cloud DNS Яндекса.
Три записи простыми словами
| Запись | Простыми словами | Где живёт |
|---|---|---|
| SPF | Список серверов, которым разрешено слать письма от вашего домена | TXT-запись на домене |
| DKIM | Подпись на каждом письме. Получатель сверяет её с ключом в DNS и видит, что письмо не подделано | TXT или CNAME на имени вида селектор._domainkey |
| DMARC | Правило для получателя: что делать с письмом, если SPF и DKIM не сошлись | TXT-запись на _dmarc |
Главная из трёх — DKIM. Без неё Postbox и Resend не подтвердят домен и не начнут отправку.
SPF
SPF — одна TXT-запись на корне домена. Она начинается с v=spf1, дальше перечислены разрешённые отправители, в конце — ~all («остальным не доверять»).
Только одна SPF-запись на домене
Если на домене две записи v=spf1, проверка SPF ломается целиком. Новых отправителей дописывайте в существующую запись, а не создавайте вторую.
Как собрать одну запись из нескольких сервисов:
| Сервис | Что добавить в SPF |
|---|---|
| Yandex Postbox | include:spf.postbox.yandexcloud.net |
| Почта домена в Яндекс 360 | include:_spf.yandex.net |
| Свой сервер (режим «Свой сервер») | ip4:IP-вашего-сервера |
| Resend | ничего: Resend ставит SPF на свой поддомен send |
Пример: почта домена в Яндекс 360, а письма клиентам — через Postbox:
v=spf1 include:_spf.yandex.net include:spf.postbox.yandexcloud.net ~allЕсли других отправителей нет, Яндекс 360 советует короткую запись v=spf1 redirect=_spf.yandex.net. Когда добавляете второй сервис, перепишите её через include, как в примере выше.
DKIM
DKIM — это ключ. Сервис отправки подписывает им каждое письмо, а открытую часть ключа вы кладёте в DNS. Значение DKIM всегда выдаёт сам сервис, его не придумывают.
| Сервис | Где взять DKIM | Как выглядит |
|---|---|---|
| Yandex Postbox | Страница адреса в Cloud Postbox, блок «Настройка подписи писем (DKIM)» | Две CNAME-записи |
| Resend | Таблица в админке Reefox Panel после «Подключить домен» или кабинет Resend | TXT на resend._domainkey |
| Яндекс 360 | Админка Яндекс 360: «Домены» → «Настроить DKIM» | TXT на mail._domainkey |
| Свой сервер | Файл на сервере, см. ниже | TXT на tmavpn._domainkey |
У каждого сервиса своё имя DKIM-записи, поэтому DKIM разных сервисов друг другу не мешают.
DMARC
DMARC говорит получателю, как поступать с письмами, которые не прошли проверку. Начните с мягкого правила — только наблюдать:
| Тип | Имя | Значение |
|---|---|---|
| TXT | _dmarc | v=DMARC1; p=none |
Через пару недель, когда убедитесь, что все письма проходят SPF и DKIM, правило можно ужесточить: p=quarantine — подозрительные письма в спам, p=reject — отклонять. Сразу ставить p=reject не стоит: если вы что-то забыли, перестанут доходить и ваши обычные письма с домена.
Gmail требует DMARC от больших отправителей
Если с домена уходит больше 5 000 писем в день на адреса Gmail, Google требует все три записи — SPF, DKIM и DMARC. Для небольшого сервиса достаточно SPF или DKIM, но DMARC всё равно повышает доверие к письмам.
Записи для режима «Свой сервер»
В режиме «Свой сервер» письма отправляет почтовый сервер внутри Reefox Panel на вашей машине. Ему нужны все записи сразу, плюс PTR. Здесь example.ru — почтовый домен, 203.0.113.10 — IP вашего сервера.
| Запись | Тип | Имя | Значение |
|---|---|---|---|
| SPF | TXT | @ | v=spf1 a mx ip4:203.0.113.10 ~all |
| DKIM | TXT | tmavpn._domainkey | ключ из файла на сервере, см. ниже |
| DMARC | TXT | _dmarc | v=DMARC1; p=none |
| PTR | — | IP сервера | mail.example.ru |
DKIM-ключ сервер создаёт сам при первом запуске. Посмотреть его можно по SSH:
docker exec vpn-app cat /app/data/mail/dkim/example.ru/tmavpn.txtВ файле ключ разбит на несколько кусков в кавычках. Для DNS склейте их в одну строку, начиная с v=DKIM1, без кавычек и скобок.
PTR (обратная запись) связывает IP сервера с именем. Её ставит не регистратор, а хостинг: в панели сервера или через поддержку. Без PTR Gmail, Яндекс и Mail.ru часто отклоняют письма.
Многие хостинги закрывают порт 25
Свой сервер отправляет письма через порт 25. Многие хостинги закрывают его, чтобы с их сетей не шёл спам. Тогда письма теряются молча, хотя админка пишет «отправлено». Если не хотите с этим разбираться, выберите Yandex Postbox: он работает по HTTPS.
Как добавить запись у регистратора
У всех регистраторов форма похожа: тип, имя, значение и иногда TTL.
Откройте управление DNS-записями домена. Обычно это раздел «DNS», «Управление зоной» или «DNS-записи».
Нажмите кнопку добавления записи и выберите тип: TXT, CNAME или MX.
В поле имени (оно может называться «Хост», «Поддомен» или «Name») впишите имя без вашего домена: _dmarc, а не _dmarc.example.ru. Для корня домена — @ или пустое поле, как требует регистратор.
В поле значения вставьте значение целиком, скопировав его из сервиса. TTL оставьте по умолчанию.
Сохраните. Обычно записи начинают отвечать через 5–30 минут. Иногда — до 72 часов.
Где чаще всего ошибаются
- Домен дважды. Регистратор сам дописывает домен к имени. Если вписать
_dmarc.example.ru, получится_dmarc.example.ru.example.ru. - Не та панель DNS. Записи работают только там, куда указывают NS-серверы домена. Если домен делегирован в Cloudflare, записи у регистратора ни на что не влияют.
- Кавычки и пробелы. Лишний пробел или обрезанный ключ ломают DKIM. Копируйте значение кнопкой «Скопировать», а не выделением мышью.
- Проксирование в Cloudflare. CNAME для почты должны быть «DNS only», серое облако.
Как проверить записи
На Mac и Linux в терминале есть команда dig. Она показывает, что видит весь интернет. Замените example.ru на свой домен.
# SPF — должна быть ровно одна строка с v=spf1
dig +short TXT example.ru
# DMARC
dig +short TXT _dmarc.example.ru
# DKIM Resend
dig +short TXT resend._domainkey.example.ru
# DKIM Яндекс 360
dig +short TXT mail._domainkey.example.ru
# DKIM Postbox: имя CNAME скопируйте из Postbox
dig +short CNAME имя-из-postbox._domainkey.example.ru
# Записи Resend на поддомене send
dig +short MX send.example.ru
dig +short TXT send.example.ru
# PTR для режима «Свой сервер»
dig +short -x 203.0.113.10Пустой ответ значит, что записи пока нет или она добавлена не туда.
У домена обычно два NS-сервера. Пока запись не появилась на обоих, проверка у почтового сервиса может проходить через раз. Проверьте каждый:
dig +short NS example.ru
dig +short TXT _dmarc.example.ru @ns1.example-dns.ru
dig +short TXT _dmarc.example.ru @ns2.example-dns.ruВместо ns1.example-dns.ru и ns2.example-dns.ru подставьте серверы из первой команды.
На Windows вместо dig есть nslookup:
nslookup -type=TXT _dmarc.example.ruПроверка в самом письме
Самая честная проверка — посмотреть, как письмо принял получатель.
В Reefox Panel откройте Настройки → Сайт → «Почта и вход» и отправьте тест на свой ящик в Gmail.
Откройте письмо в Gmail, нажмите меню из трёх точек и выберите «Показать оригинал».
Вверху будут строки SPF, DKIM и DMARC. Везде должно стоять PASS.
Если где-то FAIL или NONE — эта запись отсутствует или не совпадает. Проверьте её командой dig выше.
Почему письма уходят в спам
| Причина | Что сделать |
|---|---|
| Нет DKIM или SPF | Добавьте записи из этой страницы и проверьте их через dig |
| Две SPF-записи на домене | Склейте в одну |
| Нет DMARC | Добавьте v=DMARC1; p=none |
| Email отправителя на другом домене, чем подтверждён в сервисе | В поле «Email» используйте адрес на подтверждённом домене |
| Домен совсем новый | Первые дни почтовики относятся к нему настороженно. Начните с малого потока, репутация вырастет сама |
| Режим «Свой сервер» без PTR или с закрытым портом 25 | Попросите хостинг поставить PTR или перейдите на Yandex Postbox |
| Клиенты жмут «Это спам» на напоминаниях | Не меняйте частоту и тексты на навязчивые. В каждом напоминании есть ссылка «отпишись», коды входа приходят и после отписки |
| Много писем на несуществующие адреса | Сервисы снижают доверие и могут остановить отправку. У Resend порог — 4 % возвратов |
| В тексте слова, похожие на рекламу или спам | Держите тексты напоминаний короткими и по делу. Тексты меняются в Настройки → Напоминания |
Попадание в «Промоакции» Gmail — не спам. Клиент письмо увидит, но попросите его перетащить письмо во «Входящие»: Gmail это запомнит.