Email Deliverability Checker

Check a domain's SPF, DKIM, DMARC and MX records the way a receiving mail server reads them, with a plain-English explanation and an exact fix for anything that could send its mail to spam.

The part after the @ in an email address. Pasting a full address or a website URL works too. Common DKIM selectors are tried automatically.

The domain you enter, plus any DKIM selector, is sent to Cloudflare's public DNS resolver (or Google's, as a fallback) to look up its public DNS records. Nothing else you type leaves your browser.

What this checker reads, and why receivers care

A mail server receiving a message that claims to be from you@yourdomain.com has no built-in way to know whether you sent it. Instead it looks up a few public DNS records that you, as the domain owner, publish ahead of time. Together they answer three questions: which servers may send mail for the domain, whether the message carries a signature made with a key the domain controls, and what to do when neither check passes. This tool fetches those records the way a receiving server would, follows every reference inside them, and explains each result.

RecordWhere it livesWhat it does
SPFA TXT record at yourdomain.com starting v=spf1Lists the servers and services allowed to send as the domain.
DKIMA TXT record at selector._domainkey.yourdomain.comPublishes the public key that verifies each message's signature.
DMARCA TXT record at _dmarc.yourdomain.comTies SPF and DKIM to the From address readers see, sets the policy for failures, and asks for reports.
MXMX records at yourdomain.comNames the servers that receive mail. Not authentication, but a sender that cannot receive replies looks wrong to filters.

SPF: one record, ten lookups

An SPF record is a single line: v=spf1, then mechanisms such as ip4:, include: and mx, then an all term that covers every server not listed. Two rules cause most SPF failures.

First, a domain can have only one SPF record. When a newsletter tool or help desk tells you to "add an SPF record", it means add its include: to the record you already have. Publish a second record beside the first and SPF returns a permanent error for every message you send, including mail from your main provider.

Second, checking a record may cost at most 10 DNS lookups. Each include, a, mx, ptr, exists and redirect counts, and so does every one of those inside the records you include. Providers nest includes inside their own, so a single line can cost several. Past 10, receivers stop evaluating and SPF fails outright. The include tree in the results shows where every lookup goes, which is usually enough to spot the service you stopped using two years ago.

The ending matters less than people expect. -all asks receivers to reject servers you have not listed, ~all asks them to treat that mail as suspicious, and ?all expresses no opinion. Once DMARC is in place it decides what happens to failing mail, and ~all is the common choice, because some receivers reject an SPF hard fail before checking DKIM, which can cost you forwarded mail that DKIM would have saved. +all authorizes every server on the internet and is never right.

DKIM: why a checker has to guess

DKIM signs each outgoing message with a private key held by your sending service. The matching public key sits in DNS under a selector, a label the service chooses, at selector._domainkey.yourdomain.com. The selector travels inside each message, so receivers never need a list of them, and DNS offers no way to produce one. This tool tries the selectors common providers use. If yours is something else, such as the random tokens Amazon SES generates, guessing will not find it.

To find it, send yourself a message through the service, open it with Show original in Gmail or View source in most other mail apps, and look for the DKIM-Signature header. The s= tag is the selector and d= is the domain that signed. Enter the selector above to check that exact key. RSA keys should be 2048 bits. A 1024-bit key still verifies but falls below the RFC 8301 recommendation, and a record with an empty p= has been revoked.

DMARC: the record that makes the other two count

SPF and DKIM share a blind spot: neither looks at the From address the reader sees. SPF checks the envelope sender, also called the Return-Path, which bulk email services often set to their own domain. DKIM checks whichever domain did the signing. DMARC closes the gap with alignment: a message passes only if SPF or DKIM passes for a domain that matches the visible From domain. Under the default relaxed alignment, a subdomain such as mail.yourdomain.com counts as a match.

The p= tag tells receivers what to do with mail that fails. The safe rollout has three steps:

  1. Publish v=DMARC1; p=none; rua=mailto:you@yourdomain.com and read the aggregate reports for a few weeks. They show which servers send as your domain to the providers that report, and whether each one passes.
  2. Fix the legitimate sources that fail, usually by turning on DKIM signing with your own domain, or a custom return path, in each sending service.
  3. Move to p=quarantine, optionally with pct= to apply it to a share of failing mail first, and then to p=reject.

Since February 2024, Gmail and Yahoo have required bulk senders to publish SPF, DKIM and a DMARC record of at least p=none, with the From domain aligned to one of them. For Gmail, bulk means more than 5,000 messages a day to personal accounts. Microsoft announced similar rules for Outlook.com, Hotmail and Live addresses in 2025. Smaller senders are not off the hook: Gmail asks every sender to pass SPF or DKIM.

What a clean result does not tell you

Passing every check here means receivers can confirm that mail really comes from you. It does not guarantee the inbox. Reputation decides that: complaint and bounce rates, whether your sending IP or domain appears on a blocklist, how recipients engage, and the content itself. Reverse DNS for your sending servers, a working unsubscribe link and steady volume matter too. The guide to why emails go to spam works through those in the order worth checking them.

Frequently Asked Questions

Open a message you sent through the service in question and view its original source (Show original in Gmail, View source or View message source in most other mail apps). Find the DKIM-Signature header. The s= tag is the selector and the d= tag is the domain that signed. A message can carry more than one signature, so use the one whose d= matches your domain. Enter that selector in the optional field and run the check again.
Your SPF record needs more than 10 DNS lookups to evaluate, counting every include, a, mx, ptr, exists and redirect, including the ones nested inside the records you include. RFC 7208 makes 10 a hard limit, so receivers give up and SPF fails for all of your mail. Remove includes for services you no longer use, replace a and mx terms with the ip4: and ip6: addresses they stand for, or move a high-volume sending service to its own subdomain with its own SPF record.
If you have a DMARC record, ~all is the common choice. DMARC treats a soft fail and a hard fail the same way, and some receivers reject an SPF hard fail before they check DKIM, which can lose legitimately forwarded mail. Use -all for a domain that sends no mail at all (v=spf1 -all). Never use +all, which authorizes every server on the internet.
No. RFC 7208 allows exactly one TXT record starting with v=spf1 per domain name. With two, receivers return a permanent error and SPF fails for every message. Merge them into one record that contains all the include, ip4 and ip6 terms, with a single all at the end. Other TXT records, such as site verification codes, are unaffected and can stay.
It meets the Gmail and Yahoo requirement for bulk senders, and it is the right place to start, because it turns on reporting without changing delivery. It does not protect your domain: receivers take no action on mail that fails, so anyone can still send messages that claim to be from you. Once the aggregate reports show your legitimate mail passing, move to p=quarantine and then to p=reject.
Authentication proves who sent a message, not that recipients want it. Spam filters also weigh your domain and IP reputation, complaint and bounce rates, blocklist listings, how people respond to your mail, and the content itself. A new domain or a sudden jump in volume draws suspicion too. Confirm that the passing SPF or DKIM result is aligned with your From domain, then look at reputation. Google Postmaster Tools shows how Gmail sees your domain.
DNS answers are cached for as long as the record's TTL allows, often an hour and sometimes a day. This tool asks Cloudflare's public resolver, which may still hold the old answer. Wait for the TTL to pass, or ask Cloudflare to drop its cached copy with its purge tool at one.one.one.one/purge-cache, then check again. Also make sure you edited the zone at the DNS host your domain actually uses, which its NS records name.
Three records lock it down: a null MX record (priority 0, host ".") so nobody tries to deliver to it, an SPF record of v=spf1 -all so no server is authorized to send as it, and a DMARC record of v=DMARC1; p=reject so receivers refuse anything that claims to come from it. Some administrators also publish a wildcard DKIM record with an empty key (*._domainkey, v=DKIM1; p=) so no selector can ever verify. An unused domain without these records is easy to spoof.
The Internet Omni-Tool