MX
<domain> · MX
Not checked yetThe hosts that receive mail for the domain, their order, and whether each has an address.
Email security · SPF, DMARC, DKIM, MTA-STS
Every record that decides whether mail from your domain is believed — and whether mail to it arrives encrypted — read from the DNS, followed to the end, graded, and explained in plain words. Where one is missing or wrong, the exact record to publish is written out, checked against its standard, ready to paste in.
DC‑M1 mail doctor
SPF · DKIM · DMARC · MTA-STS · TLS-RPT · BIMI
A domain, or an address at it — billing@example.com is read as example.com. Nothing is sent to the address; only public DNS records are read.
Read in my browser · two resolvers · nothing stored
The same records, asked a second way: from your browser, of Google Public DNS and Cloudflare at once, for the exact name you type, subdomains included. Each record is shown as published and explained rule by rule. No grade, and the domain never reaches our server or this page's address.
For a grade and the records to publish, examine it on our server instead.
<domain> · MX
Not checked yetThe hosts that receive mail for the domain, their order, and whether each has an address.
<domain> · TXT, v=spf1
Not checked yetThe SPF record term by term, every include and redirect followed, and the DNS lookups counted against the limit of 10.
_dmarc.<domain> · TXT
Not checked yetThe DMARC policy that applies to the domain, tag by tag, with the report addresses and whether outside receivers have agreed to them.
_mta-sts.<domain> · TXT
Not checked yetWhether an MTA-STS policy is announced, its version id, and whether the policy host exists.
_smtp._tls.<domain> · TXT
Not checked yetWhere the domain asks senders to report deliveries that failed over TLS.
default._bimi.<domain> · TXT
Not checked yetThe BIMI record, its logo and evidence locations, and whether the DMARC policy meets the conditions BIMI sets.
<selector>._domainkey.<domain> · TXT
Needs a selectorA DKIM key is published under a selector, a name chosen by whoever signs the mail. Check a domain first, then choose the selectors to test.
Selectors cannot be listed from outside a domain. A name that finds nothing proves nothing about names that were not tried.
Read against RFC 6376 §3.6.1, RFC 8301 §3.2 and RFC 8463 §4.2.
The questions are put to two public DNS-over-HTTPS resolvers, straight from your browser: Google Public DNS and Cloudflare. Each question goes to both and the answers are compared. When they differ, both are shown. When one operator does not answer within 8 seconds, the page names it and reads the record from the other alone. When neither answers, the card says so and draws no conclusion. The panel This run dates the reading to the second, in UTC.
This is not the doctor's reading. The doctor asks from our server, through one resolver, reduces what you type to the registrable domain and grades the result; this mode reads the exact name you type, subdomains included, and gives no grade. The two can differ for the same name, and the record pages below say how each one is read.
In this mode the domain you type is sent to those two operators and to nobody else: not to labs.llc's server, and not to analytics. It is not written into the page address (switching into this mode removes a ?d= the doctor left there) and it is not kept in your browser, so changing the edition, which reloads the page, clears the reading on screen. No email address is asked for and no mail is sent. labs.llc keeps a few settings of its own in your browser, none of them a domain: the edition you chose, the site search's recent searches and the doctor's instrument. Its analytics tag records the page address, which in this mode never holds the domain. Google and Cloudflare handle the queries under their own policies (Google Public DNS, Cloudflare). More on the method and the sources.
What an examination holds
Every record, what it says, what is wrong with it — and the records that put it right.
The exact records to publish — host, type, value, a zone-file line — in the order to publish them, and the grade they reach.
Who may send as you, with every include followed and the DNS lookups counted against the limit of ten.
What receivers are told to do with a forgery, and where the reports go — read tag by tag.
The signing keys found across thirty-odd common selectors, and whether each is strong enough.
Whether mail to you must arrive encrypted — the policy file fetched and matched against your mail servers.
The logo in the inbox, and whether answers about your domain are signed.
Record by record
Each page explains one record, how to read it and the mistakes made with it, and carries the checker focused on that record: asked from your browser, of two resolvers, for the exact name you type.
Every term explained, includes followed, and the DNS lookups counted against the limit of 10.
The public key under a selector you choose: its type, its length in bits, and its flags.
The policy that applies, tag by tag: p, sp, np, rua, adkim, aspf, the historic pct and the newer t.
Which hosts take the mail, in which order, and whether a null MX says the domain accepts none.
Whether a TLS policy is announced, and the record that tells senders when it changed.
The logo record and the DMARC conditions a domain must meet before a client may show it.
How the record pages ask two resolvers from your browser, the 17 documents they were written against, and what they do not check.
What each record does
Email was designed with no way to prove who sent it: the From line is whatever the sender types. Everything on this page is a later repair — a handful of DNS records, each answering one question a receiving server asks about a message that claims to be from you.
A receiving server asks of every message: did this really come from the domain it names? Three records answer it together. SPF lists the servers allowed to send for the domain. DKIM puts a signature on each message that only the real sender’s key can make. DMARC ties the two to the From line a reader actually sees — a message passes only if SPF or DKIM passes for that same domain — and tells the receiver what to do when neither does.
None of the three is enough alone. SPF checks an address the reader never sees and breaks when mail is forwarded; DKIM proves a signature but not whose; only DMARC turns them into a rule. That is why DMARC carries the most points here, and why a domain without an enforcing DMARC policy cannot grade above C.
An SPF record is one TXT record at the domain itself, beginning
v=spf1: a list of mechanisms — ip4: and ip6: for
addresses, include: for another domain’s list, mx and
a for this domain’s own servers — and a final all that
says what happens to everyone else: -all fail, ~all soft
fail, ?all no opinion, +all welcome, which is never right.
Two rules catch most domains out. There may be only one SPF
record; two is a permanent error and SPF fails for every message. And evaluating
it may take at most ten DNS lookups (RFC 7208 §4.6.4), counting
every include, a, mx, ptr,
exists and redirect — including the ones inside the
includes. Each service you add brings its own lookups, and the eleventh breaks
the record for everyone. This page follows every include and counts.
The SPF checker does the same count in your browser for any name, subdomains included, and shows the lookups in the order a receiver meets them.
A TXT record at _dmarc. the domain. Its policy, p=, is
the whole point: none asks for reports and changes nothing;
quarantine sends failing mail to spam; reject refuses it.
rua= names where the daily aggregate reports go — an XML summary, from
every large receiver, of every server that sent mail claiming to be you, and
whether it passed.
The safe way up is the order the prescription gives. Publish with
p=none and a report address; read two weeks of reports; make sure
every service that sends as you passes SPF or DKIM; then quarantine;
then, when nothing legitimate is failing, reject. The prescription
writes the quarantine record directly, with the monitoring step beside it for
anyone not certain their senders are covered.
Since May 2026 DMARC is RFC 9989, which replaced RFC 7489, and this doctor reads it so:
pct= is historic and no longer scales the grade, t=y marks a
policy under test that receivers apply one level lower, and a record with no valid
policy but a report address is read as p=none. The
DMARC checker reads any record tag by tag, with DMARC record
examples and the DNS tree walk that finds the record a subdomain falls under.
A DKIM key lives at <selector>._domainkey. the domain, and the
selector can be any name at all — each message says which one signed it. There is
no way to list a domain’s selectors from outside, so this page tries more than
thirty that mail providers use by default. Finding none is reported as
not found, not as proof there is none.
Nor can a DKIM record be written here: the key pair is made by whoever sends your mail, which keeps the private half to sign with. The prescription says where, at your provider, to switch it on. Keys should be 2048-bit RSA or Ed25519; 1024-bit still verifies but is past its time (RFC 8301).
If you know the selector — the s= tag of a message’s DKIM-Signature —
the DKIM lookup finds that one key and measures its length.
Mail between servers is encrypted only if both sides agree to it, and an attacker
in the path can make it look as though your server does not — so the sender
delivers in plain text. MTA-STS (RFC 8461) closes that: a TXT
record at _mta-sts. announces a policy file, served over HTTPS at
mta-sts. the domain, that names your mail servers and says “always
encrypt, and only to these”.
TLS-RPT (RFC 8460) is its companion: a TXT record at
_smtp._tls. asking senders to report, daily, every connection that
failed. Publish both, run the policy in testing mode while the reports
come in, and switch to enforce once they are clean. The policy must
list every MX host — the page checks each one against it, because a host the
policy does not match is a host enforcing senders will refuse.
The MTA-STS and TLS-RPT check reads both records from two resolvers in your browser, and the MX lookup lists the mail hosts in the order senders try them, with their addresses.
BIMI puts your logo beside your messages in Gmail, Apple Mail and Yahoo. It is honoured only once DMARC enforces, needs a logo in the SVG Tiny PS format and — for Gmail and Apple — a paid mark certificate, so it is worth five points here and no record is written for it.
DNSSEC signs the answers about your domain, so a forged MX or SPF record can be told from the real one. It is switched on at your DNS host and completed with a DS record at your registrar, not with a record you paste in.
The BIMI record check reads the logo record and says which of the draft’s DMARC conditions, if any, stands in the way.
Nobody grades email security officially; a receiver never sees a letter, only the records. The grade is this page’s way of saying how far along a domain is, by a rule printed in full here and in every report:
| Check | Points | The rule |
|---|---|---|
| SPF | 25 | -all or ~all within ten lookups: 25 · no “all”: 12 · ?all: 8 · over ten lookups or two void lookups: 5 · +all, none, two records or invalid: 0 · “ptr” costs 3 |
| DMARC | 30 | read against RFC 9989 · reject: 30 · quarantine: 28 · none: 10 · t=y (a policy under test) counts one level lower · pct is historic and not scored · no valid policy but a report address: read as none · no report address: −3 · sp=none or np=none under an enforcing policy: −2 |
| DKIM | 20 | a key of 2048 bits or more, or Ed25519: 20 · 1024 bits: 14 · smaller: 5 · none found: 0 |
| MTA-STS | 10 | enforce, every MX covered: 10 · testing: 8 · policy unreadable or an MX not covered: 2 |
| TLS-RPT | 5 | a valid record with a report address |
| DNSSEC | 5 | the zone is signed |
| BIMI | 5 | a valid record, with DMARC enforcing as the BIMI draft requires (a quarantine policy only without a pct below 100) |
A at 85 or more, B at 70, C at 55, D at 40, F below — the same letters the WHOIS report and our server use. A domain whose DMARC policy
does not enforce is held at C whatever else it has; one whose SPF ends
+all is held at D. A domain that takes and sends no mail is graded
on a shorter list — SPF -all (30), DMARC reject (35), a null MX (20),
DNSSEC (15) — because its only job is to refuse forgeries. Checks that do not apply
are left out of the total rather than given away, and a grade is withheld
altogether when SPF or DMARC could not be read.
One thing is not tested: whether your mail servers actually offer encryption. That needs a connection to port 25, which our server’s host blocks, and the page says so rather than guessing. Readings are kept on our server for ten minutes; nothing you examine is stored anywhere else.
What it will never claim
01
A signing key is made by whoever sends your mail. The page says where to switch it on and never writes a key, a selector or a CNAME it would have to invent.
02
A record that could not be read is Unknown, and the grade is withheld rather than worked out without it. A timeout never costs you points, and never earns you any.
03
Whether your mail servers offer TLS can only be seen on port 25, which is closed to our server. The page says it did not test it — and points to the reports that will.