Common SPF errors and how to fix them
The messages below appear in bounces, in the Authentication-Results header of a received message, or in other checkers. Here is what each one means and what to change.
SPF permerror: too many DNS lookups
Why. Once every include is followed, the record needs more than 10 DNS lookups. The receiver stops and returns a permanent error, which DMARC treats as an SPF failure.
Fix. Remove the services you no longer use. Replace includes that cover a few fixed addresses with ip4: or ip6:, which cost nothing. Send bulk mail from a subdomain (news.example.com) with its own SPF record.
SPF permerror: multiple SPF records found
Why. Two TXT records start with v=spf1, usually because a new provider asked you to "add an SPF record" and the old one stayed.
Fix. Merge them into one: a single v=spf1, every include and address of both, one all at the end. Then delete the other record.
spf=softfail (domain of … does not designate 192.0.2.1 as permitted sender)
Why. The server that sent the message is not in the record, which ends in ~all. Most often a service that sends in your name (CRM, invoicing, a website form) was never added.
Fix. Find the sending service from the Received headers and add the include it documents. If the message was not yours, the record did its job.
550 5.7.23 The message was rejected because of Sender Policy Framework violation
Why. Microsoft, and other receivers, refused the message because SPF failed on a record ending in -all, or because DMARC enforced the failure.
Fix. Add the missing sender, as for a softfail. Forwarded mail cannot pass SPF: sign your mail with DKIM so that DMARC passes through DKIM instead.
SPF void lookup limit exceeded
Why. More than two DNS lookups made while evaluating the record returned no answer or NXDOMAIN, usually a, mx or exists mechanisms that point to names which were deleted or mistyped. The receiver stops with a permerror (RFC 7208, section 4.6.4).
Fix. Remove or correct the mechanisms that point to names that no longer exist. An include to a domain without an SPF record is a separate, stricter error: it fails the record at the first one, so remove it or replace it with the include the provider documents today.
No SPF record found
Why. There is no TXT record starting with v=spf1 on the domain itself: it was published on www, in another zone, or never.
Fix. Publish one TXT record on the domain (named @ in most DNS panels). A domain that never sends mail publishes v=spf1 -all.