SPF-запись начинается с v=spf1, за которым следуют механизмы: ip4 и ip6 для диапазонов адресов, a и mx для собственных хостов домена и include, чтобы подключить список провайдера, отправляющего почту за вас. Заканчивается она правилом для всех остальных: -all (отклонять всё прочее), ~all (softfail: принимать, но с подозрением) или ?all (без утверждения).
Принимающий сервер сверяет подключающийся IP-адрес с SPF-записью домена отправителя конверта (Return-Path), а не адреса From, который видит пользователь. Этот разрыв закрывает DMARC, требуя, чтобы домен SPF был согласован с видимым доменом From.
Большинство сбоев SPF вызывают два ограничения. Домен может публиковать только одну запись v=spf1; две записи дают постоянную ошибку. И проверка может вызвать не более десяти DNS-запросов, считая include, a, mx, exists и redirect, включая вложенные; превышение тоже даёт постоянную ошибку. SPF также ломается при пересылке почты, потому что IP пересылающего сервера нет в вашей записи, и это одна из причин подписывать почту ещё и DKIM.
Пример
example.com. 3600 IN TXT "v=spf1 ip4:192.0.2.0/24 include:_spf.mailer.example -all"