What do you check in DNS, and what does a finding mean?
On every plan
We check the DNS records that decide how your mail is authenticated and delivered: DMARC, SPF, DKIM, MX, MTA-STS, TLS-RPT and BIMI. Your plan sets how often the checks run, and Check now runs them at any time. Each finding is a sentence in plain words, and the table at the end of this page lists every one with its fix.
What we check
- DMARC at
_dmarc.example.com: the policy, and whether reports come to your reporting address. - SPF at example.com: the record, every include under it, and the number of DNS lookups it needs.
- DKIM at
<selector>._domainkey.example.com, for every selector we know of. - MX at example.com: the servers that receive your mail.
- MTA-STS at
_mta-sts.example.com, and the policy file athttps://mta-sts.example.com/.well-known/mta-sts.txt. - TLS-RPT at
_smtp._tls.example.com: where TLS reports go. - BIMI at
default._bimi.example.com, and the logo and certificate it points to.
How often
When you add a new domain, we check its records once straight away, so its DNS tab shows what your DNS says before the domain is verified. If you remove a domain and add it again within your plan's interval below, that check is not repeated. Press Check now on its DNS tab to check it then. Once a domain is verified, we check its records on a schedule set by the plan:
- Starter: every 24 hours
- Pro: every 6 hours
- Teams: every hour
- Enterprise: every 15 minutes
A report that arrives also starts a check, at most every hour. A subdomain with a DMARC record of its own is checked on the same schedule as its domain.
Check now on a domain's DNS tab runs every check at once and asks the domain's own name servers, so a record you changed a moment ago shows up straight away. Any member can press it. For the same domain, it works again after 1 minute.
How to read a finding
Each record's card on the DNS tab is marked by its worst finding: a problem, a warning, a note, or fine.
A problem opens a DNS error alert, except when it only says we could not reach your DNS. For a few findings, the DNS tab also writes out the corrected record, ready to copy.
SPF lookups
A mailbox provider follows at most 10 lookups while it checks an SPF record (RFC 7208), and fails the check past that. We count every lookup through every include. A redirect counts only when the record has no all, because mailbox providers ignore it then. Above the limit you get a problem, and from 8 lookups a warning. More than 2 lookups that find nothing also give a warning. When we cannot read an included record, the card says so and the count is a minimum: the problem above the limit still shows, and the warning near it does not.
DKIM selectors
DNS has no list of a domain's DKIM keys. Each key sits under a name called a selector, so we look for selectors in three places:
- The selectors that signed your mail, as the reports show them.
- The selectors that the services among your sources document.
- A short list of common selectors, such as
google,selector1andk1.
The DNS tab shows where we learned of each selector. A selector that has not been in a report for 90 days and has no key in DNS moves to a list of retired selectors, and we go on checking it. You cannot add a selector by hand.
Finding no key at all is a note, not a problem: a sending service may sign your mail with its own domain, and then there is nothing to find at yours.
Change history
Each time a check finds a record whose value differs from before, the change history gets a new entry. A check that finds the same value adds nothing. The history covers the names under your domain, not the records of the services your SPF record includes. It keeps 13 months of changes on every plan.
A change to a record we had seen before raises an alert that the record changed. A change of DMARC policy raises an alert that the policy changed instead.
Every finding
| What the check found | How to fix it |
|---|---|
| DMARC | |
| There is no DMARC record at _dmarc.example.com. Mailbox providers send no reports for this domain until there is one. | Publish the DMARC record from the Records tab. p=none is a safe start. |
| There are 2 DMARC records at _dmarc.example.com. Mailbox providers treat that as no record at all. | Remove all but one. |
| The pct tag is not valid. Mailbox providers ignore it or the whole record. | – |
| The record has a tag we do not know, zz. Mailbox providers ignore it. | – |
| The policy is p=none. Mailbox providers deliver failing mail as usual and only report it. That collects data and blocks nothing. | Once the reports show every legitimate source passing, move to p=quarantine, then p=reject. |
| The policy is p=quarantine. Mailbox providers put failing mail in the spam folder. | – |
| The policy is p=reject. Mailbox providers refuse failing mail. | – |
| The policy applies to 30 percent of failing mail. Mailbox providers deliver the rest as if the policy were none. RFC 9989 retires pct, and some mailbox providers apply it to all failing mail or to none. | – |
| The record sends reports elsewhere, not to abc@reports.example.net. example.com gets no reports here until it does. | Add rua=mailto:abc@reports.example.net to the record. |
| The record names no address for reports, so nobody receives any. | – |
| The record asks for forensic reports with ruf. Few mailbox providers send them, and they can contain message content. | – |
| mailto:r@other.test is on other.test, which has not published the record that lets it receive reports for example.com. Mailbox providers skip that address. | Ask other.test to publish example.com._report._dmarc.other.test TXT "v=DMARC1", or remove the address. |
| Subdomains have sp=none, so mail from any subdomain of example.com is delivered even when it fails. | Remove sp=none, or set it to the same value as p. |
| adkim=s asks for strict alignment: the signing or sending domain must match example.com exactly, not a subdomain of it. | – |
| We could not reach the DNS for example.com. This is our side or the network, not your record. We try again at the next scheduled check. | – |
| SPF | |
| example.com has no SPF record. Mailbox providers cannot tell which servers may send as it. | Publish a TXT record at example.com that lists your sending services and ends in -all. |
| example.com has 2 SPF records. Mailbox providers treat that as an error and apply none of them. | Merge them into one record. |
| ip4:999.0.2.0/24 is not a valid SPF term. Mailbox providers stop at it. | – |
| The record ends in +all, which says that anyone may send as example.com. | Change +all to -all. +all tells mailbox providers that anyone may send as you. |
| The record ends in ~all. Mail from an unlisted server fails softly, which counts as a fail for DMARC. | – |
| The record ends in ?all, which says nothing about unlisted servers. Mailbox providers treat it like no SPF. | Change ?all to ~all or -all. |
| The record has no all term. Mail from an unlisted server gets a neutral result, which is as good as no SPF. | End the record with -all. |
| The record uses ptr, which is slow, unreliable and deprecated by RFC 7208. Some mailbox providers ignore it. | Replace ptr with the server's ip4 or ip6 address. |
| The record needs 12 DNS lookups. The limit is 10, and mailbox providers stop at it and fail the check. | Replace includes you no longer use with nothing, and includes for a fixed set of servers with their ip4 or ip6 ranges. |
| The record needs 9 DNS lookups of the 10 allowed. One more sending service could push it over. | Replace includes you no longer use with nothing, and includes for a fixed set of servers with their ip4 or ip6 ranges. |
| 3 lookups in the record point at names with no address. The limit is 2. | Remove the includes that point at names with no SPF. |
| One term in the record is longer than 255 characters, which a single TXT string cannot hold. | – |
| The record is 600 bytes. Over 512, some resolvers fall back to TCP or truncate the answer. | – |
| loop.test includes a record that includes it back. Mailbox providers fail the check. | Remove the include that points back. |
| The record includes gone.test, which has no SPF record of its own. | Remove include:gone.test, or check the name with the sending service. |
| We could not read the SPF record at down.test. This is our side, the network or that service's DNS, not necessarily your record. The lookup count is a minimum until we can read it. | – |
| We could not reach the DNS for example.com. This is our side or the network, not your record. We try again at the next scheduled check. | – |
| No report in the last 30 days shows mail from Mailchimp, but your SPF record still includes it. Removing include:servers.mcsv.net saves 1 lookup. | If you no longer use Mailchimp, remove include:servers.mcsv.net. |
| This term uses a macro. Macros depend on the message being checked, so we cannot resolve them in advance. | – |
| DKIM | |
| We found no DKIM key at the selectors we know for example.com. Your sending service may sign under its own domain instead, which reports will show. | – |
| Selector k1 has a 2048-bit key. | – |
| Selector k1 has an empty key, which means it was revoked. | Remove selector k1, or publish the key again in your sending service. |
| Mail signed with selector k1 for example.com arrived on 14 September 2026, but k1._domainkey.example.com has no DKIM key now. Mail signed with it will fail DKIM. | Publish the key again in the service that signs with selector k1. |
| Selector k1 is flagged t=y, testing. Mailbox providers treat its signatures as if there were none. | Remove t=y from the record once the selector is in use. |
| Selector k1 has a 1024-bit key. 2048 bits is the current recommendation, and some mailbox providers refuse shorter keys. | Rotate to a 2048-bit key in your sending service. |
| Selector k1 has a record we could not read as a DKIM key. | – |
| We could not reach the DNS for example.com. This is our side or the network, not your record. We try again at the next scheduled check. | – |
| MX | |
| example.com has no MX record. Mail sent to it goes to the domain's own address, if there is one, or bounces. | – |
| example.com publishes a null MX. It says the domain sends no mail and receives none. | – |
| example.com has 2 mail servers. | – |
| The mail server gone.example.com has no address. Mail routed to it cannot be delivered. | Fix or remove the MX entry for gone.example.com. |
| We could not reach the DNS for example.com. This is our side or the network, not your record. We try again at the next scheduled check. | – |
| TLS-RPT | |
| example.com has no TLS-RPT record. Mailbox providers cannot tell you when they fail to reach it over TLS. | Publish the TLS-RPT record from the Records tab. |
| The TLS-RPT record sends reports elsewhere, not to abc@reports.example.net, so they do not show up here. | Add mailto:abc@reports.example.net to rua. |
| The TLS-RPT record is in place. | – |
| The TLS-RPT record is not valid at rua. Mailbox providers ignore it. | – |
| We could not reach the DNS for example.com. This is our side or the network, not your record. We try again at the next scheduled check. | – |
| BIMI | |
| example.com has no BIMI record. That is normal. BIMI shows a logo beside your mail in some inboxes and needs a certificate that costs money. | – |
| The BIMI record is in place. | – |
| The record names no certificate. Gmail and Apple Mail show the logo only with one. | – |
| The BIMI record is not valid at l. Mailbox providers ignore it. | – |
| We could not reach the DNS for example.com. This is our side or the network, not your record. We try again at the next scheduled check. | – |
| We could not fetch the BIMI logo at the l= address. Mailbox providers will not show it. | – |
| The BIMI logo is not an SVG file we can read. | – |
| The BIMI logo is not SVG Tiny PS. Its svg element needs version="1.2" and baseProfile="tiny-ps". | – |
| The BIMI logo has no title element. SVG Tiny PS requires one. | – |
| The BIMI logo contains a script. Mailbox providers reject logos with scripts. | – |
| The BIMI logo links to something outside the file. SVG Tiny PS allows no external references. | – |
| The BIMI logo is animated. SVG Tiny PS allows no animation. | – |
| The BIMI logo's svg element has x or y attributes. SVG Tiny PS does not allow them there. | – |
| The BIMI logo is not square. Mailbox providers show it in a square or a circle. | – |
| The BIMI logo is SVG Tiny PS as far as we can check. | – |
| We could not fetch the BIMI certificate at the a= address. | – |
| The file at the a= address is not a certificate we can read. | – |
| The BIMI certificate has expired. Mailbox providers stop showing the logo. | – |
| The BIMI certificate is not valid yet. | – |
| The BIMI certificate does not name example.com. | – |
| The BIMI certificate names example.com and is in date. We do not check who issued it. | – |
| MTA-STS | |
| example.com has no MTA-STS record. That is optional. It tells sending servers to insist on TLS when delivering to you. | – |
| The MTA-STS record is not valid at id. Sending servers ignore it. | – |
| We could not fetch the policy file at https://mta-sts.example.com/.well-known/mta-sts.txt (blocked_address). Sending servers cannot apply a policy they cannot read. | – |
| The policy file is not valid at mode. Sending servers ignore it. | – |
| The policy is in testing mode. Sending servers report problems and deliver anyway. | – |
| The policy mode is none, which enforces nothing. Usually that means a migration was left unfinished. | Set mode to testing, then to enforce once the reports are clean. |
| The policy is enforced. Sending servers insist on TLS to your mail servers. | – |
| The policy does not list every mail server: mail2.example.com. Sending servers refuse to deliver to a server the policy does not name. | Add the missing servers to the policy file, then change the id in the record. |
| The policy's max_age is 3600 seconds. Sending servers forget it that soon. A week or more is usual. | Set max_age to 604800 or more. |
| We could not reach the DNS for example.com. This is our side or the network, not your record. We try again at the next scheduled check. | – |
Published 27 October 2026 · Checked 27 October 2026