SPF Missing 'all' Mechanism
Your domain has an SPF record but it's missing the critical all mechanism at the end.
Without it, unauthorized senders default to a neutral result, providing no protection.
What "no all mechanism" means
An SPF record is evaluated from left to right. Each mechanism (include, ip4,
mx, etc.) is checked against the sender's IP address. If a match is found, the
corresponding result is returned. But what happens when no mechanism matches?
That's where the all mechanism comes in. It acts as a catch-all at the end of the
record, defining the default result for any sender that doesn't match any of the listed mechanisms.
all mechanism: When no mechanism matches and there is
no all at the end, SPF returns a "neutral" result. This is the same as
?all — receiving servers make no distinction between authorized and unauthorized
senders. Your SPF record is effectively incomplete and provides no protection against spoofing.
Here's a comparison of what a complete versus incomplete SPF record looks like:
Incomplete (missing all)
v=spf1 include:_spf.google.com
This record authorizes Google Workspace, but says nothing about what to do with emails from other servers. Unauthorized senders get a "neutral" result, which means no protection.
Complete (with -all)
v=spf1 include:_spf.google.com -all
This record authorizes Google Workspace and explicitly rejects everything else. Unauthorized senders get a "fail" result, which tells receiving servers to reject the email.
Why every SPF record needs all
The all mechanism is the most important part of your SPF record. Without it, your
authorized sender list is only half the equation. You've said who is allowed, but you
haven't said what to do about everyone else.
| SPF record ending | Unauthorized sender result | Protection |
|---|---|---|
-all |
Fail — email rejected | Strong (recommended) |
~all |
Softfail — email flagged as suspicious | Moderate |
?all |
Neutral — no action taken | None |
| No all mechanism | Neutral — no action taken (implicit default) | None |
As you can see, a missing all mechanism produces the same result as ?all:
no protection. The only difference is that ?all is an explicit choice, while a missing
all is almost always an oversight.
all mechanism is the instruction for what to do with
everyone who isn't on the list. Without it, the default is to let them through unchecked.
How this happens
There are several common reasons an SPF record might be missing the all mechanism:
Typo or copy error
When copying an SPF record from documentation, the -all at the end was accidentally left out or truncated.
Incomplete setup
The record was created as a work-in-progress and never finished. The administrator may have intended to add -all after testing but forgot.
Editing mistake
When modifying the record to add a new service, the -all was accidentally removed or the new text was added after it instead of before it.
Misunderstanding
The administrator may not have realized that the all mechanism is required for SPF to provide any enforcement against unauthorized senders.
How to fix it
The fix is straightforward: add -all to the end of your existing SPF record.
Review your current SPF record
Look at your existing SPF record and make sure all your legitimate email senders
are listed. Since you already have an SPF record with authorized senders, you
likely just need to add the missing -all at the end.
Verify all senders are included
Before adding -all, double-check that every service that sends email
from your domain is listed in the record. This includes your email provider,
marketing platforms, CRM, helpdesk, and any custom applications. Adding -all
will block email from any sender not in the record.
Add -all to the end of your record
Log into your DNS provider's control panel, find your SPF TXT record, and add
-all at the very end, after all other mechanisms. Make sure there's
a space before it.
Save and verify
Save the DNS record change and verify it using Domain Guarddog or a command-line
tool like dig TXT yourdomain.com. Allow up to 48 hours for full
DNS propagation.
~all (soft fail) instead of -all.
This will flag unauthorized emails as suspicious without rejecting them, giving you time to
verify your setup. Once confirmed, switch to -all for full protection.
Before and after examples
Google Workspace
Before (missing all):
v=spf1 include:_spf.google.com
After (with -all):
v=spf1 include:_spf.google.com -all
Microsoft 365
Before (missing all):
v=spf1 include:spf.protection.outlook.com
After (with -all):
v=spf1 include:spf.protection.outlook.com -all
Multiple services
Before (missing all):
v=spf1 include:_spf.google.com include:sendgrid.net ip4:203.0.113.10
After (with -all):
v=spf1 include:_spf.google.com include:sendgrid.net ip4:203.0.113.10 -all
IP-based record
Before (missing all):
v=spf1 ip4:192.0.2.0/24 ip4:198.51.100.0/24
After (with -all):
v=spf1 ip4:192.0.2.0/24 ip4:198.51.100.0/24 -all
-all mechanism must always be the
last item in your SPF record. SPF is evaluated left to right, and anything
after all is ignored. Never place include or ip4
mechanisms after -all.
For a comprehensive overview of SPF, including all mechanisms, qualifiers, and common mistakes, see our complete guide to SPF.
Fix your SPF record and stay protected
Domain Guarddog monitors your SPF, DKIM, and DMARC configuration and alerts you when records are incomplete or misconfigured.
Get Started Free