Skip to content
AdminKit

What does an SPF check result actually mean?

An SPF check doesn't return a single pass/fail answer — RFC 7208 defines seven distinct outcomes (Pass, Fail, SoftFail, Neutral, None, PermError and TempError), and which one a receiving mail server gets for a given message depends on whether the sending IP matches your record's mechanisms and which qualifier (+, -, ~, ?) is attached to the match, including the catch-all "all" mechanism at the end.

By AdminKit team, Netbase JSC · Updated October 29, 2026

SPF is a set of outcomes, not a single answer

Unlike a simple yes/no check, RFC 7208 defines SPF evaluation as producing one of seven named results: Pass, Fail, SoftFail, Neutral, None, PermError and TempError. AdminKit’s SPF check parses your domain’s SPF record with its own code, walks every mechanism in it, and reports which of these outcomes your current record would actually produce — along with the specific reason, rather than a bare label. Knowing which result you’re looking at, and why, matters more than just seeing “it looks fine,” because several of these results look superficially similar but mean very different things to a receiving mail server.

Pass: the sending IP is authorized

A Pass means the connecting server’s IP matched one of the mechanisms in your SPF record — an ip4, ip6, a, mx, include, or exists mechanism resolved to include that address. This is the result every legitimate sending source should produce. It’s worth being precise about what Pass actually verifies: it confirms the IP is authorized to send for the domain used in the SMTP envelope (the “return-path” or “mail from” domain), not the domain shown in the message’s visible From: header a recipient sees — those can differ, which is exactly the gap DMARC’s alignment check exists to close.

Fail and SoftFail: two different strengths of “not authorized”

Both results mean the sending IP didn’t match anything in the record, but the SPF record’s own trailing all mechanism decides which one gets returned, via its qualifier. Fail (-all) is defined in RFC 7208 §4.6.2 as “an explicit statement that the client is not authorized to use the domain” — the strongest signal SPF can send, and many receivers reject or heavily penalize mail that fails this way. SoftFail (~all) is explicitly described as only “a weak statement,” meant to flag a message as suspicious (commonly routed to spam) without outright rejecting it — useful while a domain owner is still confirming every legitimate sending source is listed, before committing to a hard -all.

Neutral and None: SPF isn’t asserting anything

Neutral results from an explicit ?all qualifier, and is defined as the domain owner stating it has no opinion on whether the connecting host is authorized. None is different: it means no SPF record exists for the domain being checked at all, rather than one that exists but declines to assert anything. In practice, both results give a receiver nothing to act on — mail is evaluated as if SPF weren’t a factor either way. If a domain’s default all mechanism is left off entirely (no all term at all), evaluation falls through to Neutral behavior by default.

PermError: the record itself is broken

A PermError is categorically different from the results above — it means SPF evaluation could not be completed correctly because of a problem with the record’s configuration, not because of anything specific to the sending IP. The two most common causes: more than one SPF-type TXT record published at the same name (RFC 7208 §4.5 treats this as an automatic PermError, since a receiver can’t know which one to trust), and exceeding the hard limit of 10 DNS lookups during evaluation, set by RFC 7208 §4.6.4. A PermError is often treated as badly as a hard Fail by receivers — see fixing SPF “too many DNS lookups” (PermError) for how the lookup limit gets exceeded and how to fix it.

TempError: a temporary evaluation problem

A TempError means something transient went wrong during evaluation — typically a DNS query that timed out or returned a server failure — rather than anything wrong with the record’s actual content. RFC 7208 treats this as inconclusive, and most receivers retry the message later or temporarily defer it rather than rejecting outright. A TempError that appears once and doesn’t recur usually isn’t worth investigating; one that persists across repeated checks points to a DNS resolution problem independent of the SPF record’s syntax.

Reading your own result

Run AdminKit’s SPF check against your domain to see which of these seven outcomes your current record produces, along with the specific mechanism and qualifier responsible. If the result is Pass with a strong -all, SPF is doing its job for that sending source. If it’s PermError, fix the underlying record problem before anything else — a broken record can make even your legitimate mail fail. For how SPF fits together with DKIM and DMARC as a complete authentication setup, see SPF, DKIM and DMARC explained.

This guide is general information, not a security audit of your specific network — see our disclaimer for what AdminKit's guidance does and does not commit to.

Frequently asked questions

What's the actual difference between Fail and SoftFail?

Both mean the sending IP isn't authorized, but they carry different instructions to the receiver. RFC 7208 §4.6.2 defines Fail (-all) as "an explicit statement that the client is not authorized," which receivers are expected to treat as a real rejection signal, while SoftFail (~all) is "a weak statement" meant to be accepted but marked, typically routed to spam rather than bounced outright.

My check came back Neutral — does that mean something is wrong?

Not necessarily broken, but it means SPF isn't doing much. Neutral (explicit ?all, or the default behavior when a record has no all mechanism at all) tells receivers the domain is explicitly not asserting anything about whether the sender is authorized — mail is treated the same as if no SPF record existed. It's a valid configuration, but it provides none of SPF's actual protection.

What causes a PermError, and is it worse than a Fail?

Yes — PermError is worse, because it isn't about one sending IP being unauthorized, it means the record itself is broken: more than one SPF TXT record published at the same name, unparseable syntax, or more than 10 DNS lookups during evaluation (RFC 7208 §4.6.4). Many receivers treat a PermError the same as a hard fail for every sender, authorized or not, since the check couldn't be completed at all.

What does a TempError mean, and should I worry about it?

TempError means evaluation hit a temporary problem — usually a DNS lookup that timed out or returned a server failure — not a problem with the record's content. RFC 7208 treats it as inconclusive rather than a failure; most receivers retry later or temporarily defer the message rather than rejecting it outright. A one-off TempError usually isn't worth chasing; a persistent one suggests a DNS resolution problem worth investigating separately.

Does getting a Pass result mean the email definitely isn't spoofed?

No. A Pass only confirms the connecting server's IP is listed as authorized in the SPF record for whatever domain was checked during the SMTP transaction (the envelope-from domain) — it says nothing about whether that domain matches the visible From: address the recipient actually sees, and nothing about whether the message content was altered. Those two gaps are exactly what DMARC alignment and DKIM close; see SPF, DKIM and DMARC explained for how the three combine.

Want AdminKit to watch this for you?

Free checks tell you the state today. Protective DNS and monitoring tell you when it changes.

Huy Nguyen (David), Founder and CEO of Netbase JSC

Talk to an expert

Huy Nguyen (David), Founder & CEO, Netbase JSC

Ask whether this fix applies to your setup, or get a second pair of eyes on your DNS and mail records.