IT
OmnvertImage • Document • Network

SPF / DKIM / DMARC Checker

Validate TXT records and highlight common misconfigurations.

What to look for

  • SPF: a single record, terminal policy (~all or -all), DNS lookups ≲ 10.
  • DKIM: correct selector and a published public key (p=...).
  • DMARC: p=quarantine/reject for enforcement, rua= for reports, alignment (adkim/aspf).
Server-sideProcessed server-side

This tool uses a server-side service for processing; uploaded files or requests are not kept for long-term storage.

About

Email authentication lives entirely in DNS, which is why it breaks quietly and gets discovered when messages start landing in spam. This checker reads the SPF, DKIM and DMARC records for a domain and lays them out so you can see what is published, whether the syntax holds up, and whether the policy is strict enough to be worth anything.

SPF is a single TXT record at the root of the domain listing who may send on its behalf, for example v=spf1 include:_spf.google.com ip4:203.0.113.10 -all. Receivers check the envelope sender — the MAIL FROM address, not the From: header the recipient sees — against that list. Two details cause most SPF failures. The first is the qualifier at the end: -all is a hard fail, ~all is a soft fail that says “probably not us, deliver anyway”, and +all is functionally the same as publishing nothing. The second is the ten-DNS-lookup limit. Every include, a, mx, ptr, exists and redirect counts against it, and once the chain exceeds ten the record is a permerror, which many receivers treat as no SPF at all. Stack Google Workspace, a CRM, a helpdesk and a marketing platform and you will cross that line without noticing; flattening the record or moving senders onto subdomains is the fix.

DKIM signs the message itself rather than authorising an IP. Your sending platform holds a private key, adds a DKIM-Signature header covering the body and a chosen set of headers, and publishes the matching public key at selector._domainkey.yourdomain.com. The selector is just a label — google, k1, s1, mail — and it is the piece people cannot find, because it only exists in the headers of a message that platform actually sent. Send yourself a test, open the raw source, and the s= tag in the DKIM-Signature line names the selector. Use 2048-bit keys; 1024 is still accepted but on the way out. Signatures also break when something in transit rewrites the message, which is why mailing lists that append a footer or prefix the subject cause DKIM failures that are not your fault.

DMARC is where the two are tied back to the domain the recipient actually sees. Published at _dmarc.yourdomain.com as something like v=DMARC1; p=none; rua=mailto:reports@yourdomain.com, it does two jobs: it tells receivers what to do when authentication fails, and it requires alignment — the domain that passed SPF or DKIM must match the From: header domain. Alignment is the part that surprises people. A message can pass SPF cleanly and still fail DMARC, because the envelope sender was bounces@sendgrid.net while the From: header said you@yourdomain.com. Only one of the two needs to pass and align, which is why DKIM is the more durable mechanism: it survives forwarding, and SPF frequently does not.

Roll DMARC out in stages. Publish p=none first and read the aggregate reports for a few weeks — they arrive as XML from every major receiver and show which sources are sending as your domain and whether they align. There are always two or three that nobody remembered: an old invoicing system, a monitoring tool, a form on a legacy site. Move to p=quarantine, then to p=reject, once the legitimate senders are all passing. Going straight to p=reject is a fast way to find those forgotten systems, and an expensive one. The pct= tag lets you ramp a policy across a fraction of mail while you watch the reports.

Reading the results: an SPF record that exists but ends in ~all is doing very little on its own. A DMARC record at p=none is a monitoring configuration, not a protection — spoofed mail still gets delivered. Two v=spf1 records on the same domain is a permerror, not a merge, and it happens whenever someone adds a second provider by creating a new TXT record instead of editing the existing one. A DKIM lookup only works if you supply the selector, so an empty result usually means the wrong selector rather than a missing key.

Other things that regularly go wrong: publishing the DMARC record at yourdomain.com instead of _dmarc.yourdomain.com; a DNS panel that appends the domain again so the host ends up as _dmarc.yourdomain.com.yourdomain.com; forgetting sp= so subdomains inherit a policy you did not intend; and leaving parked or unused domains without an SPF -all and a DMARC p=reject, which makes them ideal for spoofing precisely because nobody watches them. Note also that a domain does not need an MX record to send mail — but if it doesn’t receive mail, publishing a null MX and a strict SPF closes off a whole category of abuse.

This tool reads public DNS, so it reflects what receivers can see, subject to TTL and resolver caching after a change. Treat it as a pre-flight check rather than a deliverability audit: authentication is necessary but not sufficient, and IP reputation, list hygiene, complaint rates, content and engagement all still decide where mail lands. It does not evaluate BIMI, ARC or MTA-STS, and it cannot tell you whether a specific message you sent passed — for that, read the Authentication-Results header on a delivered copy, or your DMARC aggregate reports.

How it works

  1. 1Open SPF / DKIM / DMARC Checker and choose your file or enter the required input.
  2. 2Check the settings and start the process.
  3. 3The tool creates the result with temporary server-side processing.
  4. 4Download the output or copy the result when it is ready.

FAQ

What is SPF?
A DNS TXT record that declares which servers may send mail for your domain. Receivers compare the sending server against it, checking the envelope sender rather than the visible From: address.
What do -all and ~all mean?
-all is a hard fail: anything not listed should be rejected. ~all is a soft fail: treat it as suspicious but deliver. +all allows everything and is equivalent to having no policy. Most domains should end at -all once the sender list is confirmed complete.
What is the SPF 10-lookup limit?
SPF allows at most ten DNS-resolving mechanisms per evaluation — include, a, mx, ptr, exists and redirect all count. Exceed it and the record returns permerror, which many receivers handle as if SPF were absent. Consolidate providers or flatten the record to stay under it.
Can I publish two SPF records?
No. A domain may have only one v=spf1 TXT record; two is a permanent error rather than a combination. Merge the mechanisms of both providers into a single record.
What is DKIM?
A cryptographic signature added to outgoing mail. The sending platform signs with a private key and publishes the public key in DNS, so the receiver can verify the message was authorised and hasn’t been altered in transit.
How do I find my DKIM selector?
Send a message to yourself, view the raw source, and look at the s= tag in the DKIM-Signature header. That is the selector, and the key lives at selector._domainkey.yourdomain.com. Providers usually document theirs as well.
Why does DKIM fail on mailing lists?
Lists often add a subject prefix or a footer, which changes content the signature covers and invalidates it. ARC exists to preserve the original result across such hops, but support is uneven — this is a known limitation, not a misconfiguration on your side.
What is DMARC?
A policy record that ties SPF and DKIM results to the visible From: domain and tells receivers what to do on failure: p=none to monitor, p=quarantine to send to spam, p=reject to refuse the message outright.
What is DMARC alignment?
The domain that passed SPF or DKIM must match the From: header domain. This is why a message can pass SPF and still fail DMARC — the envelope sender belonged to your email provider rather than to you. Only one of the two needs to pass and align.
Should I go straight to p=reject?
No. Start at p=none, read the aggregate reports for a few weeks to find every legitimate sender, then move through p=quarantine to p=reject. Jumping straight to reject is how forgotten systems get discovered, in production.
Why don’t my changes show up?
DNS caching. Resolvers hold the old answer until the TTL expires, so a record with a 24-hour TTL can take that long to be visible everywhere. Lower the TTL before making changes you expect to iterate on.
Does passing SPF, DKIM and DMARC guarantee inbox placement?
No. Authentication gets you considered rather than accepted. Sending IP and domain reputation, complaint rate, list quality, message content and recipient engagement all still determine whether mail reaches the inbox.

Guides & tutorials