Email Domain Security Checker
Check a domain's SPF, DMARC and DKIM — and see exactly how easy it is to spoof.
Enter any domain and this tool pulls its SPF, DMARC and DKIM records straight from DNS, then does the analysis a mail-receiving server would: it parses every SPF mechanism and DMARC tag into plain English, counts the SPF DNS lookups (the RFC 7208 10-lookup limit that silently breaks SPF), probes the common DKIM selectors, and scores how well the domain resists email spoofing. You get a prioritized list of practical fixes — not just "record present / missing".
Domain to check (the domain that sends the mail — e.g. yourcompany.com, not the full email address)
Spoofing-risk score (how hard is it to send fake mail as this domain?)
Findings (what a receiving mail server would notice, in plain English)
SPF Sender Policy Framework
DMARC Domain-based Message Authentication
DKIM DomainKeys Identified Mail
MX Mail context
Additional signals
Recommended fixes (prioritized — do these top to bottom)
Raw DNS-over-HTTPS responses (JSON, RFC 8484)
How email authentication actually works
When you send an email, the message claims to come from a domain
([email protected]). But that claim is just text —
anyone can type any address they like into the "From" field. Email
authentication exists so the receiving mail server can independently
verify, using public DNS records, that the sender is actually authorized by
that domain. Three systems do this job, and they answer three different
questions:
| System | Question it answers | How |
|---|---|---|
| SPF | "Is this server allowed to send mail as my domain?" | Your domain publishes an SPF record listing the IP addresses / hosts authorized to send. The receiver checks the connecting IP against that list. |
| DKIM | "Was this message really signed by my domain, and is it unaltered?" | Your mail server cryptographically signs each message with a private key. The public key is published in DNS; the receiver verifies the signature. |
| DMARC | "If SPF or DKIM fails, what should the receiver do — and who do I report it to?" | DMARC ties the two together: it requires the "From" domain to align with the domain that passed SPF or DKIM, and it sets a policy (none / quarantine / reject) plus a reporting address. |
SPF and DKIM are the evidence; DMARC is the policy that says what to do when the evidence is missing or contradictory. A domain with all three, configured with an enforcing DMARC policy, is very hard to spoof. A domain with none of them can be impersonated by essentially anyone.
Reading an SPF record
An SPF record is a space-separated list. It starts with v=spf1
and then contains mechanisms (things to match against) and
modifiers (options). Each mechanism can carry a
qualifier that says what to do when it matches:
| Qualifier | Meaning | Receiver behaviour on match |
|---|---|---|
| + | Pass (the default when omitted) | Authorized — accept. |
| - | Fail | Not authorized — reject. |
| ~ | Softfail | Probably not authorized — flag, but usually still deliver. |
| ? | Neutral | Take no position. |
The most important mechanism is all, which matches
everything. It almost always appears last and sets the
default outcome for any sender not matched earlier:
-all (hard fail, strongest), ~all (soft fail,
common), ?all (neutral, weak) or +all (pass
— this authorizes everyone and defeats SPF entirely).
The 10-lookup limit. RFC 7208 says an SPF check must not require more
than 10 DNS queries (including the SPF record itself). Mechanisms like
include:, a, mx, ptr and
redirect: each trigger lookups — and an
include: can itself contain more includes. When a record
exceeds the limit, most receivers stop evaluating it and treat the result as
a permerror, which often means your legitimate mail starts
failing. This tool counts the lookups for you.
Reading a DMARC record
A DMARC record lives at _dmarc.yourdomain.com and is a set of
key=value tags separated by semicolons. The ones that matter:
| Tag | What it does | Good values |
|---|---|---|
| v | Version (required). | DMARC1 |
| p | Policy for the domain when mail fails SPF/DKIM alignment (required). | reject > quarantine > none |
| sp | Separate policy for subdomains. | match your subdomain sending |
| rua | Where aggregate reports are sent (daily "who sent as you" summaries). | mailto:[email protected] |
| ruf | Where forensic (per-message failure) reports are sent. | optional |
| pct | Percentage of mail the policy applies to. | 100 |
| aspf / adkim | Alignment strictness for SPF / DKIM. | r (relaxed) is the safe default |
The recommended path is: publish p=none with a
rua address first, read the aggregate reports for a couple of
weeks to make sure your legitimate senders are authenticating, then move to
p=quarantine, and finally p=reject. That gradual
enforcement is what stops spoofing without breaking your own mail.
Common email-authentication problems (and what they mean)
- No SPF record — the receiver has no list of authorized senders, so anyone can send mail claiming to be your domain. This is the single biggest spoofing enabler.
- Multiple SPF records — invalid. A domain may publish exactly one SPF record; with two or more, receivers pick one (often arbitrarily), so your policy is unpredictable. Consolidate to one.
- SPF over the 10-lookup limit — too many
include:chains. Receivers give up (permerror) and your real mail can be rejected or downgraded. - SPF ends in
+all— authorizes every IP on the internet. SPF is present but provides zero protection. - No DMARC record — even with good SPF/DKIM, the receiver has no policy for what to do on failure, and you get no reports. A top cause of legitimate mail landing in spam.
- DMARC
p=none— monitoring only. Nothing is enforced, so spoofed mail is still delivered. Fine as a starting point, not as an end state. - No DKIM key — outgoing mail is unsigned, so receivers can't verify it wasn't altered in transit, and DMARC alignment has one less signal to work with.
- Weak DKIM key (1024-bit) — 1024-bit RSA is considered breakable in the long term; 2048-bit is the current minimum, 3072+ is better.
- SPF/DKIM pass but don't align with the "From" domain — e.g. you send from
mail.yourcompany.combut the "From" address is@yourcompany.comand DMARC uses strict alignment. DMARC then fails even though SPF and DKIM individually passed. Relaxed alignment (aspf=r/adkim=r) fixes most of these.
A sensible starting configuration
For a domain that sends mail through a single provider (Google Workspace, Microsoft 365, a hosting provider, etc.):
- SPF — one record listing your provider, ending in
-all. Example for Google Workspace:v=spf1 include:_spf.google.com -all. For Microsoft 365:v=spf1 include:spf.protection.outlook.com -all. - DKIM — enable signing in your provider's admin console and publish the key it gives you (this is what this tool's DKIM probe is looking for).
- DMARC — start with
v=DMARC1; p=none; rua=mailto:[email protected], then after a clean couple of weeks of reports move top=quarantineand finallyp=reject.
Do one change at a time and re-run this checker after each — watch the score climb and the findings clear. Re-check 24–48h after any change so you're reading the propagated records, not a stale cache.