SPF PermError and the 10-Lookup Limit
Why an SPF record that looks valid still returns a permanent error, and how to get back under the lookup limit.
Symptom: authentication tools say PermError, or a receiver quotes an SPF error, while the TXT record still 'looks like SPF'. The usual cause is the 10-lookup limit. Includes that include other includes count. The record does not get a warning at 9 and a pass at 11. It errors.
Test by expanding the record with a lookup tool you trust, or by reading the DNS answers yourself, and counting mechanisms that query DNS. ip4 and ip6 do not look up. include, a, mx, and exists do, and nested includes add more.
Fix
Remove senders you no longer use. Ask a vendor whether they offer a dedicated include that costs fewer lookups. As a last resort, replace an include with the IPs it currently resolves to, and diary a review, because those IPs will change and your record will not.
Do not 'fix' it by publishing a second SPF record. That is a different permanent failure. Sendblox cannot repair DNS. It can only send once the record evaluates.
Before you publish a change for SPF PermError, write down the date, the record you edited, and the one message you used as a test. A week later, check whether that test still matches production. Provider rules, DNS includes, and CRM fields all move. A page that was true in general can be wrong on your domain if nobody looked again. Keep the send small until that check is dull. One contact, one objective, a person reading the draft. If the test fails, stop the campaign. Do not widen it to see whether a larger list forgives a broken setup.
Before you publish a change for SPF PermError, write down the date, the record you edited, and the one message you used as a test. A week later, check whether that test still matches production. Provider rules, DNS includes, and CRM fields all move. A page that was true in general can be wrong on your domain if nobody looked again. Keep the send small until that check is dull. One contact, one objective, a person reading the draft. If the test fails, stop the campaign. Do not widen it to see whether a larger list forgives a broken setup.