#Что произошло и как распознать неисправность
Для одного имени домена в DNS опубликованы две отдельные TXT-записи, начинающиеся с v=spf1. Почтовые получатели не могут выбрать одну политику SPF и возвращают SPF PermError; письмо может попасть в спам или быть отклонено политиками сервера. Это не та же ситуация, что одна длинная TXT-запись, разбитая DNS-провайдером на несколько строк внутри одного значения. SPF оценивает запись домена, используемого для SMTP MAIL FROM (либо HELO при соответствующем сценарии), а не автоматически видимый From. Перед слиянием нужно установить все разрешённые источники почты: сайт, CRM, почтовый сервер и внешние службы.
#Причины и отличительные признаки
| Возможная причина | Как узнать | Что делать |
|---|---|---|
Опубликованы два отдельных SPFДва значения TXT начинаются v=spf1 у одинакового DNS-имени. | dig TXT example.com +short показывает две отдельные строки SPF. | Составить одну логически согласованную SPF-политику. |
Часть отправителей потеряна при ручном объединенииВ новой записи забыли IP, include или механизм и письма перестали проходить SPF. | SPF fail возникает только у одного сервиса. | Сверить документы каждого отправителя и добавить нужный механизм в пределах ограничений. |
Превышен лимит DNS-проверокПри объединении появились цепочки include/redirect с более чем 10 DNS-поисками. | SPF PermError остаётся уже с единственной TXT-политикой. | Упростить вложенные механизмы, не копируя всё подряд. |
| Изменена не авторитетная зонаПанель внесла TXT в старый DNS, а делегирование ведёт к другой службе. | Прямой запрос к авторитетному NS всё ещё показывает два SPF. | Исправить записи у текущего DNS-провайдера. |
#Пошаговая диагностика и исправление
- Сначала прочитайте все TXT у авторитетного DNSНа компьютере с dig выполните
dig TXT example.com +short, замените example.com доменом отправителя. Найдите отдельные TXT, начинающиеся сv=spf1. Одна логическая TXT-запись может содержать несколько строк в одном DNS-ответе; это не ошибка. Если именно две разные TXT-записи начинаются с v=spf1 у одного имени, исправление необходимо. - Уточните домен из реального почтового обменаОткройте исходные заголовки тестового доставленного письма и найдите
Return-Path,smtp.mailfromв Authentication-Results. Для этого домена ищите SPF; запись на основном example.com не всегда управляет почтой поддомена mail.example.com. Запишите SPF-результаты, не публикуя полный заголовок с личными данными. - Составьте список всех легитимных отправителейВ административных кабинетах сайта, хостинга, службы рассылок и CRM найдите их официальные требования к SPF. Запишите
ip4,ip6,includeдля фактически отправляющих сервисов. Не копируйте целиком чужую строкуv=spf1внутрь другой: в одной политике версия указывается только один раз. Если сервис больше не используется, проверьте это по журналам перед удалением. - Проверьте число обращений DNSДля SPF существуют ограничения на число DNS-запрашивающих механизмов, обычно максимум 10 для
include,a,mx,exists,redirectи других соответствующих конструкций. Составьте итоговую запись на бумаге и оцените вложенные include. Если их слишком много, согласуйте сокращение количества источников или выделение отправителей на поддомены; не увеличивайте лимит на принимающем сервере. - Сохраните обе исходные TXT перед исправлениемВ панели авторитетного DNS-провайдера откройте зону и найдите TXT у нужного имени (для вершины домена часто используется
@, но формат интерфейса зависит от провайдера). Экспортируйте зону или скопируйте обе строки, TTL и имя. Не удаляйте другие TXT: они могут содержать проверку владения, DKIM, DMARC и служебные ключи. - Замените две SPF на одну проверенную записьУдалите только два конфликтующих TXT со значением v=spf1 и добавьте одну составленную политику для того же DNS-имени. Например, демонстрационная запись
v=spf1 ip4:192.0.2.10 -allгодится только если именно этот IP единственный отправитель; не копируйте адрес из документа на свой домен. Сначала выберите корректные реальные механизмы и завершающее правило на основе своей политики. - Проверьте TXT у всех авторитетных серверовПосле сохранения выясните делегированные NS и выполните
dig @ns1.example.com example.com TXT +shortдля каждого. В ответе должна оставаться одна SPF-политика. Если на разных NS есть разные версии, ищите проблему синхронизации или изменения не у того DNS-провайдера. Обновление кеша у внешних получателей может занять время согласно прежнему TTL. - Отправьте контрольное письмо и сохраните возможность откатаОтправьте одно тестовое письмо через каждый используемый почтовый сервис и посмотрите
spf=passдля нужногоsmtp.mailfrom; отдельно оцените DMARC-согласование. Если у законного отправителя SPF fail, восстановите недостающий механизм в единственной политике после проверки документации сервиса. Не возвращайте вторую SPF-запись: это вновь создаст PermError. - Команды для отдельных ситуацийВыберите только подходящий вариант. Это не одна последовательность: часть команд диагностирует проблему, а часть меняет настройки или данные.
#Как проверить результат и что делать при неуспехе
Успех — на одном имени ровно одна SPF-политика, разрешённые отправители дают spf=pass, а получатели больше не возвращают PermError из-за выбора нескольких записей. При сохранении ошибки проверьте вложенные include и лимиты DNS-запросов.