InboxRatio
Check your domain

SPF softfail: what ~all really tells receivers, and when it becomes a problem

The SPF specification is unusually honest about softfail. RFC 7208 defines it as a statement that the domain owner believes the sending host is not authorized but "is not willing to make that strong policy statement" a hard fail would be. A hedge, in other words, written into the protocol on purpose. Understanding softfail means understanding why a domain owner would want to hedge, and why so many SPF records end in ~all rather than the harder -all.

If you're here because a header or a checker showed spf=softfail, there are two different situations that produce it, with two different fixes. We'll take the mechanics first, then the diagnosis.

The four qualifiers, and where softfail sits

Every mechanism in an SPF record can carry a qualifier, and the one attached to the final all term declares the domain's default for any server not matched earlier:

  • +all — pass everything. An open door; never use it.
  • ?all — neutral. The domain declines to state an opinion.
  • ~allsoftfail. Probably not authorized; accept the mail but treat this result as a mark against it.
  • -all — fail. Not authorized; the domain invites rejection.

So v=spf1 include:_spf.espmail.net ~all reads: mail from my ESP's servers passes; mail from anywhere else, be suspicious but don't bounce it on my say-so. The spec tells receivers not to reject a message on softfail alone, though they may subject it to closer scrutiny, a gentler instruction than fail's, and in practice major providers treat a lone softfail as one weak signal in a larger filtering decision, not as grounds for refusal.

Why softfail exists: the forwarding problem

The hedge is not cowardice; it is a rational response to SPF's known blind spot. SPF checks the connecting server's IP against the domain's list, and forwarding puts legitimate mail on IPs the domain owner cannot list. A message you sent perfectly can arrive at its final destination from a university relay, an alumni forwarder or an old mailbox's auto-forward rule. Under -all, a strict receiver may reject that mail outright. Under ~all, it survives with a demerit.

That is why ~all became the working convention for sending domains, and why the "upgrade to -all" advice you'll see in hardening guides deserves context. In the era of DMARC, the enforcement decision has largely moved up a layer: DMARC only counts SPF as a pass when the result is pass and the domain aligns, so softfail and fail land identically at DMARC evaluation, and the domain's DMARC policy, not the SPF qualifier, decides the message's fate. With DMARC at enforcement, ~all versus -all changes little for aligned mail streams. The main population still served by -all is domains that send no mail at all, where there is nothing legitimate to forward and no reason to hedge.

Situation one: softfail on mail that isn't yours

The healthy case. Your record says ~all, someone spoofs your domain from an unauthorized server, receivers evaluate SPF and record softfail. The mechanism is working as designed. You will see these events in your DMARC reports as failing rows from IPs you don't recognize, and the correct response is at the DMARC layer: move toward quarantine and reject per the staged method in how to set up DMARC, so the hedged SPF verdict stops being the only thing standing between a spoofer and your recipients' inboxes.

Situation two: softfail on your own legitimate mail

The misconfiguration case, and the one that brings most people to this page. A message you genuinely sent shows spf=softfail in its Authentication-Results header. Since softfail means "matched nothing but the ~all," the diagnosis is always the same: the server that sent this message is not in your SPF record. Common routes to that state:

  1. A missing include. You added a new sending service, a CRM, a support desk, a billing system, and never added its include: to your record.
  2. The wrong domain carries your record. SPF is evaluated against the envelope sender (return-path) domain, which on many platforms is a bounce domain like bounce.yourdomain.com. If the record lives on the wrong host, your real mail matches nothing.
  3. A copy-paste record from another environment, listing the old ESP's servers but not the current one's.
  4. Forwarding en route. The recipient's address silently forwards to another mailbox, and the final hop sees the forwarder's IP. Nothing on your side is broken; DKIM, which survives forwarding, is what keeps DMARC passing on that path.

The fix for the first three is mechanical: identify the sending service's documented include, add it, and re-verify. Paste your domain into the SPF checker to see the record receivers actually fetch, and use the SPF generator to rebuild it cleanly if it has accumulated years of cruft. While editing, watch the protocol's budget: every include spends DNS lookups against the ten-lookup limit, and blowing that budget converts your softfails into the far worse permerror.

How much softfail actually hurts

Ranked honestly against everything else in why emails go to spam, a softfail on your own mail is a moderate problem with an outsized signature. On its own it rarely spam-folders mail from a sender with solid domain reputation. But it silently fails the SPF half of DMARC, leaving DKIM as your only aligned proof; if DKIM then hiccups, your mail fails DMARC entirely. And under Google's and Yahoo's bulk-sender rules, summarized on our Gmail and Yahoo requirement pages, authentication that works is an entry condition, not extra credit. Treat a softfail on legitimate mail as a defect to fix this week: cheap now, expensive when it compounds with the next problem.

Verifying the fix

DNS edits deserve verification from the receiving side, not the publishing side. After updating the record, send a real message to a mailbox you control at a major provider, open the raw source, and read the Authentication-Results line with the email header analyzer. You want spf=pass with your envelope domain named, and dmarc=pass alongside it. A full-stack check with the email authentication checker closes the loop, and the email deliverability score confirms nothing else in the setup layer is waiting to be found.

Related guides

About this guide

Written by InboxRatio Editorial. Softfail semantics are drawn from RFC 7208 directly; receiver treatment is described per the major providers' published sender documentation, and where behavior is convention rather than specification, it is labeled as such. No vendor sponsorship influences it.

Methodology

InboxRatio's benchmark sends real campaigns through the platforms we review to a controlled seed list and records where each message lands. This guide draws on the SPF specification and provider documentation rather than our measurements; the testing protocol is documented in how we test and our source rules in sources.

Last updated

10 September 2026. Specification references and provider treatment reviewed quarterly.

Frequently asked questions

What does SPF softfail mean? The sending server matched nothing in the domain's SPF record, and the record ends in ~all: the domain believes the server is probably not authorized but asks receivers to accept the message and merely treat the result as a suspicious signal, per RFC 7208.

Is SPF softfail a pass or a fail? Neither, deliberately. For filtering, receivers treat it as a weak negative signal. For DMARC, it is not a pass, so it cannot satisfy DMARC's SPF requirement; only spf=pass with an aligned domain does that.

Should I use ~all or -all in my SPF record? For domains that send mail, ~all plus an enforced DMARC policy is the common modern posture: DMARC provides the enforcement while ~all avoids hard-bouncing legitimately forwarded mail. Reserve -all for parked domains that send nothing at all.

Why is my own email getting SPF softfail? Because the server that sent it is not in your SPF record: a missing include: for a sending service, the record published on the wrong (envelope) domain, or an intermediate forwarder. Run the SPF checker and compare its server list against everything that legitimately sends for you.

Does softfail mean my email goes to spam? Not by itself, at most providers. It weakens your authentication posture, fails the SPF leg of DMARC, and stacks with other negatives. Senders with good reputations usually survive a stray softfail; senders with marginal reputations don't have that luxury.

How do I fix SPF softfail? Identify the unmatched sending IP from the header or DMARC report, add the responsible service's documented include to your record, stay under ten DNS lookups, and verify from a real delivered message's headers that the result reads spf=pass.

Softfail is the protocol shrugging. Make sure it only ever shrugs at mail that isn't yours: two minutes with the SPF checker tells you which side of that line your record is on.