Bounces and errors

What Causes SPF PermError, and How Do I Fix It?

Outreach2dayPublished 2 min read
On this page

Short answer

SPF PermError means the receiver could not evaluate your SPF record at all. The causes are two SPF records on one domain, more than 10 DNS lookups across includes, more than two lookups that return nothing, or a syntax error. DMARC treats PermError like a fail, so mail can bounce or land in spam. Merge to one record, cut includes you no longer use, and check the lookup count.

The four causes

RFC 7208 defines when an SPF check ends in PermError:

Cause

Rule

How it happens

Two SPF records

A domain may publish only one v=spf1 record (section 4.5)

Adding a new provider as a second TXT record instead of merging

More than 10 DNS lookups

include, a, mx, ptr, exists and redirect count; the limit is 10 (section 4.6.4)

Stacking includes for every tool; each include can hide several more

More than 2 void lookups

Lookups that return no record count separately; more than two is an error (section 4.6.4)

Includes of tools you cancelled, typos in domains

Syntax error

An unknown mechanism or a malformed term (section 4.6)

ip4: with a space, include without the colon, a stray quote

An include: that points to a domain without an SPF record is also a PermError (section 5.2).

PermError, fail and softfail

These are different results:

  • fail (from -all): the record is valid and the sending IP is not in it. Gmail rejects some of these with 550 5.7.26 "has an SPF record with a hard fail policy (-all) but it fails to pass SPF checks".

  • softfail (from ~all): the IP is not in the record, and the domain asks receivers to accept but treat it with suspicion.

  • permerror: the record itself is broken, so no IP passes. Every email from the domain fails SPF until it is fixed, whichever server sent it.

For DMARC, all three are a non-pass for SPF. Mail still passes DMARC if DKIM passes for your domain, which is why a broken SPF record sometimes goes unnoticed until DKIM breaks too.

Free guide19 min read

Send 100,000 cold emails a month

Domains and mailboxes you need, DNS, warmup, lists, copy and follow-ups, with a launch checklist, sent to your inbox.

Unsubscribe in one click.

How to fix it

  1. Check the record with the SPF checker: it counts lookups through every include and flags duplicates and syntax errors.

  2. Merge duplicates into one record: v=spf1 include:first include:second ~all.

  3. Remove includes for tools you no longer use. This is the cheapest way under 10.

  4. Move cold email to separate domains. A cold email domain needs one or two includes; the main domain keeps CRM, helpdesk and marketing tools.

  5. Flatten only as a last resort. Replacing includes with IP addresses keeps the count down, but the IPs change without notice. The SPF flattening tool shows the trade-off, and the SPF record generator writes a clean record from your providers.

After the change, send a test to Gmail and look for spf=pass in the headers, or paste them into the email header analyzer.

What we recommend at Outreach2day

Keep cold email on its own domains, with SPF that lists only the sending service. The domains we set up get one short SPF record for our sending servers, a few lookups at most.

Sources

Deliverability call

Talk to our deliverability team

Book a call with the people who run our mailbox infrastructure. We look at your current setup and tell you what to change.

  • Review your domains, DNS records and current inbox placement
  • Size the setup: domains, mailboxes per domain and daily volume per mailbox
  • Plan warmup and the move from your current provider or sequencer

Free call

See open times in your time zone and book on this page.

Or open the booking page

See deliverability issues before they kill performance

Check each mailbox's daily inbox, spam and bounce rate, replace the weak ones early, and keep warmup, protection, and sending in one place.