Free tool

DMARC, SPF and DKIM checker

Last reviewed 18 September 2026

This tool reads the public DNS records that decide whether a mailbox provider trusts mail from your domain: the SPF record on the domain itself, the DMARC record at _dmarc, and a DKIM key at a selector you name. It reports what each record contains and a verdict on each thing worth checking — one SPF record, the ten-lookup limit, a soft or hard fail, a policy stronger than none, and somewhere for the reports to go. The domain is used to build the query and then discarded.

Type a domain and read back what the internet can already see: your SPF record, your DMARC policy, and a DKIM key if you name the selector, each with the verdicts that matter for sending in bulk.

Your sending platform names it in its DNS instructions, and any signed message you have received carries it in the s= tag of its DKIM-Signature header.

The records are public, so there is no reason to keep a record of who looked: the domain is used to build the queries and then discarded.

Enter a domain to read its SPF and DMARC records. Add a selector and its DKIM key is read too.

How this tool works

What the three records do, in the order a receiver reads them

SPF is a list, published in DNS, of the servers allowed to send mail using your domain in the envelope sender. A receiving server takes the address the sending machine claimed, looks up your SPF record, and checks whether the machine it is talking to is on the list. It proves something about the route, not about the message, and it breaks whenever mail is forwarded, because the forwarder is not on your list.

DKIM is a cryptographic signature over the message itself. Your sending platform signs outgoing mail with a private key and publishes the matching public key in DNS under a selector, and a receiver fetches that key and verifies that the headers and body it received are the ones that were signed. It survives forwarding, which is exactly where SPF fails, and the two are complementary rather than alternatives.

DMARC is the policy that makes the other two mean something. It says what a receiver should do with mail that claims to be from your domain and passes neither check in a way that lines up with the domain in the visible From address — that alignment requirement is the part that matters, because SPF and DKIM on their own can both pass for a message whose visible sender is forged. DMARC also asks for aggregate reports, which is the only feedback most senders ever get about who is sending as them.

Since early 2024 the two largest consumer mailbox providers have required anyone sending bulk mail to their users to publish all three: SPF, DKIM, and a DMARC record on the sending domain. The bar is a record existing, not a strict policy, which is why so many domains publish p=none and stop there.

What this tool checks in an SPF record

First, whether there is exactly one. A domain publishing two records starting v=spf1 is a permanent error by the specification, and the correct behaviour for a receiver is to fail the check outright rather than to pick one. This is the single most common way a domain breaks SPF for itself: a second sending platform is added, its record is pasted in alongside the existing one, and everything quietly starts failing. Two providers means one record with both of their include mechanisms in it.

Second, the lookup count. Every include, a, mx, ptr, exists and redirect mechanism in your record costs a DNS lookup, and the specification caps the total at ten, counting recursively through everything your includes pull in. Past ten a receiver returns a permanent error, which is treated as a failure, and the record that was working last month stops working because a provider added an include inside their own. This tool counts the mechanisms in the record it can see and warns as the number approaches the limit; it does not resolve your includes, so the true recursive total can be higher than the figure shown here.

Third, the final qualifier. A record ending -all asserts that anything not on the list is forged; ~all says it is probably forged but asks the receiver not to reject on that alone. Both are usable, and with DMARC in place the difference matters less than it used to, because the DMARC policy is what decides the outcome. What is worth flagging is +all, which authorises the entire internet to send as you and is almost always a mistake, and a record with no all mechanism at all, which is a record that declines to say anything about the servers it did not list. The ptr mechanism is also flagged: it has been deprecated for years, it is slow, and receivers are entitled to ignore it.

What this tool checks in a DMARC record

The record lives at _dmarc under your domain and must begin with the tag v=DMARC1 — a record with that tag somewhere in the middle is invalid and is ignored entirely. The tool reads the policy tag p, which is the whole point of the record: none means "tell me what is happening and deliver it anyway", quarantine means "treat failures as suspicious", and reject means "do not accept mail that fails". A domain that sends no mail at all should publish p=reject, which is the cheapest anti-impersonation measure available to anybody who owns a domain.

p=none is the right place to start and the wrong place to stay. Its purpose is to collect aggregate reports for a few weeks so you can find the legitimate senders you had forgotten about, fix their authentication, and then tighten the policy. A domain that has been on p=none for three years is a domain whose DMARC record protects nobody: it satisfies the bulk-sender requirement to have a record and it has never once caused a forged message to be refused.

Which is why the rua tag is checked. Without an address for aggregate reports there is no feedback loop, nothing tells you who is sending as you, and there is no evidence on which to ever move off p=none. The tool also reports pct when it is present and below 100 — a policy applied to a fraction of mail, which is a legitimate way to roll out a change and a strange thing to leave in place indefinitely — and the subdomain policy sp when it is set, since a strict policy on the parent with nothing on the subdomains leaves the obvious gap open.

What a DKIM lookup can and cannot tell you

DKIM keys are not discoverable. The public key sits at selector._domainkey under your domain, and the selector is an arbitrary string chosen by whoever set the key up, so there is no way to enumerate the keys on a domain and no way for this tool to find yours without being told. Your sending platform names the selector in its setup instructions, and a signed message you have received carries it in the s= tag of its DKIM-Signature header — which is the quickest way to find out what is actually being used in practice.

Given a selector, the checks are modest and worth having. Is there a record at all, does it start with v=DKIM1, and does it carry a p= tag with a key in it? A record whose p= tag is present but empty is a revoked key, which is a deliberate act and a genuine problem if it happens to be the selector your live mail is being signed with. Records longer than a single DNS string arrive in chunks and are joined back together here before being read, which is the mistake that makes a perfectly valid 2048-bit key look malformed.

What this cannot do is verify a signature. That requires a message: the headers, the body, the canonicalisation, the hash. A published key tells you the key is there and syntactically sound, and nothing whatsoever about whether your platform is signing correctly with it. The only test for that is to send a message to an address you control and read the Authentication-Results header on what arrives.

Nothing you type here is kept. The domain and the selector are used to build the DNS queries and then discarded: they are written to no log, no table and no analytics event, and the endpoint is rate-limited by network address so it cannot be used to enumerate anything at volume. The records themselves are public — anybody can look them up — which is precisely why there is no reason to keep a record of who looked.

Common questions

Do I need DMARC to send email?

To send bulk mail to the largest consumer mailbox providers, yes: since early 2024 they require a DMARC record on the sending domain along with SPF and DKIM. A record at p=none satisfies the requirement, so the practical answer is that you need the record, and you want it eventually to be stronger than none.

Is p=none good enough?

It is good enough to be accepted and not good enough to protect anybody. p=none asks receivers to report what they see and deliver it regardless, which is the right way to begin while you find every legitimate sender you forgot about. Once the reports are clean, move to quarantine and then reject.

Should my SPF record end in ~all or -all?

Either works. -all asserts that anything not listed is forged; ~all asks receivers not to reject on that basis alone. With a DMARC policy in place the DMARC outcome is what decides delivery, so the choice matters less than it once did. What to avoid is +all, which authorises everyone, and no all mechanism at all.

What is a DKIM selector and how do I find mine?

A selector is an arbitrary label that says which key to fetch, so the public key lives at selector._domainkey under your domain. It cannot be guessed or enumerated. Your sending platform lists it in its DNS instructions, and any signed message you have received names it in the s= tag of its DKIM-Signature header.

More tools

  • Email subject line tester

    Paste a subject line and a preheader to see the character count, where each inbox cuts it off, and the five flags that get a course email ignored.

  • Email HTML size checker

    Paste your email HTML to see its size in bytes, whether Gmail will clip it, how many images and links it holds, and whether it uses flex or grid.

  • Email course outline generator

    Say what you teach, who it is for and how many days you want, and get a day-by-day outline with a subject line for each email. Rule-based, with no AI.

All four are on the tools index , and the longer writing about email courses is in the guides . What this site itself does is on the home page.

Elsewhere on this site

The rest of this site comes at the same subject from other directions: guides on the format itself, a tool for one job each, a page for each kind of work, and what to check when choosing software.

Thinking of writing one of these?

5dayemail hosts a five-to-ten day email course: you write it once, and everyone who joins your list gets one email a day, in order, starting from the day they confirm.

Accounts are opened a few at a time rather than by signing up. Leave your address and you will be written to when the next ones open.

One message, when there is room. No course emails, no newsletter, and the address is not passed on. Ask and it is deleted; what is kept, and for how long, is in the privacy policy.