DNS Checker

Look up any DNS record, including DKIM and DMARC

Checks these 7 commonly used DKIM selector names for this domain, since DKIM selectors cannot be enumerated from DNS directly.

What is DMARC?

In short: DMARC tells other mail servers what to do with email that claims to be from your domain but can't prove it.

Anyone can put your domain in the From line of an email. DMARC is a TXT record you publish at _dmarc.<your domain>. It tells receiving mail servers three things:

  1. How to check the email really came from you. SPF or DKIM must pass, and the domain it passed for must match the From domain. This match is called "alignment".
  2. What to do when the check fails. This is your policy: do nothing, treat it as suspicious, or refuse it.
  3. Where to send reports about who is sending email as your domain.
How a receiving server checks DMARC
  1. An email arrives with example.com in the From line
  2. The receiving server checks SPF and DKIM
  3. Does a passing result match the From domain?
  4. Yes: DMARC passes, deliver as normal No: apply your policy (p=)
  5. Either way, the result goes into your report (rua=)

New in the current standard

RFC 9989 (May 2026) replaces RFC 7489. Three tags were added: np=, psd= and t=. Three were removed: pct=, rf= and ri=. Finding the "organisational domain" no longer uses the Public Suffix List; it uses a DNS lookup up the domain tree instead. Tags with a New badge in the list were added in this version.

Good to know

DMARC is a request, not an order. Receivers are allowed to follow their own rules instead. The big mailbox providers do follow it.

RFC 9989, Section 4.1 (opens in a new tab)

Reading your results

In short: What the coloured status at the top of your results means.

DMARC status labels and what they mean
Status What it means
Full enforcement (p=reject) Email that fails DMARC should be refused. This is the strongest protection.
Partial enforcement (p=quarantine) Email that fails DMARC should be treated as suspicious, usually sent to the spam folder.
Monitoring only (p=none) Nothing happens to failing email. You only get reports. A good first step, but it does not stop spoofing.
Missing policy The record has no valid p= tag. If it has a valid rua= address, receivers treat it as p=none. If not, they skip DMARC for your domain completely.
Invalid DMARC version The record does not start with v=DMARC1. Receivers ignore the whole record, as if you had none.

"Not set" in the table means the tag is not in your record. The table then shows what applies instead, for example the default value or the policy the tag falls back to.

Good to know

The status only reads your record. It can't tell whether your real email passes SPF or DKIM. Your rua= reports show that.

RFC 9989, Section 4.10.1 (opens in a new tab)

Version

In short: Marks the TXT record as a DMARC record.

What it does

It must be the very first tag, and its value must be exactly DMARC1, in capitals.

Allowed values

Allowed values for v=
Value Meaning
DMARC1 The only valid value.

If it's missing

Receivers ignore the whole record. They do the same if it isn't the first tag or has a different value.

Example

v=DMARC1; p=reject

"This is a DMARC record, and failing email should be refused."

Good to know

v=dmarc1 in lower case is not valid. The value is case-sensitive.

RFC 9989, Section 4.7 (opens in a new tab)

Domain policy

In short: What receivers should do with email from your domain that fails DMARC.

What it does

The policy applies to your domain and also to its subdomains, unless sp= or np= says otherwise.

Allowed values

Allowed values for p=
Value Meaning Status shown
none Take no action. Deliver as normal. Reports are still sent. Monitoring only
quarantine Treat as suspicious, usually the spam folder. Partial enforcement
reject Refuse the email. Full enforcement

If it's missing

If the record has a valid rua= address, receivers act as if it said p=none. Otherwise they skip DMARC for your domain.

Example

v=DMARC1; p=quarantine; rua=mailto:[email protected]

"Treat failing email as suspicious, and send daily reports to [email protected]."

Good to know

The usual path is none, then quarantine, then reject. Set up rua= before you leave none, so you can see which of your own senders would fail. Use t=y while you test a stricter policy.

RFC 9989, Section 4.7 (opens in a new tab)

Subdomain policy

In short: The policy for your subdomains that really exist, such as mail.example.com.

What it does

Same values as p=. It applies only to subdomains, not to the domain itself.

Allowed values

Allowed values for sp=
Value Meaning
none Take no action.
quarantine Treat as suspicious.
reject Refuse the email.

If it's missing

Subdomains use p=.

Example

v=DMARC1; p=reject; sp=quarantine

"Refuse failing email from example.com, but only treat failing email from its subdomains as suspicious."

Good to know

sp= only works in the record at the top of your domain (for example _dmarc.example.com). In a record published for a subdomain, it is ignored.

RFC 9989, Section 4.7 (opens in a new tab)

Non-existent subdomain policy

In short: The policy for subdomains that don't exist in DNS at all.

What it does

Spoofers often make up subdomains, such as invoices-x7.example.com, hoping nobody protects them. A subdomain is "non-existent" when a DNS lookup for it says the name does not exist (NXDOMAIN). It does not mean a newly created subdomain. A subdomain you set up has DNS records, so it falls under sp=.

Allowed values

Allowed values for np=
Value Meaning
none Take no action.
quarantine Treat as suspicious.
reject Refuse the email.

If it's missing

sp= applies if it is set, otherwise p=.

Example

v=DMARC1; p=quarantine; np=reject

"Treat failing email as suspicious, but refuse anything from a made-up subdomain."

Which policy covers which subdomain
  • example.com Uses p=
    • mail.example.com Exists in DNS, so it uses sp=
    • invoices-x7.example.com Does not exist in DNS, so it uses np=

Good to know

np=reject is a safe choice for most domains. No real email should come from a name that doesn't exist.

RFC 9989, Section 4.7 (opens in a new tab)

DKIM alignment

In short: How closely the DKIM signing domain must match the From domain.

What it does

DKIM signs an email for a domain, shown in its d= tag. For DMARC, that domain must match the From domain.

Allowed values

Allowed values for adkim=
Value Meaning
r Relaxed. The same organisational domain is enough, so mail.example.com matches example.com.
s Strict. The two domains must be exactly the same.

If it's missing

Relaxed (r).

Example

adkim=s

"The DKIM d= domain must be exactly the From domain."

Relaxed and strict alignment, side by side

From: [email protected]

DKIM d=: mail.example.com

Relaxed: match. Both are under example.com.

Strict: no match. mail.example.com is not example.com.

Good to know

Only choose strict if every service that sends for you signs with your exact domain. Otherwise real email starts failing.

RFC 9989, Section 4.4 (opens in a new tab)

SPF alignment

In short: How closely the SPF domain must match the From domain.

What it does

SPF checks the MAIL FROM address (also called the Return-Path or envelope sender), not the From address people see. For DMARC, that domain must match the From domain.

Allowed values

Allowed values for aspf=
Value Meaning
r Relaxed. The same organisational domain is enough.
s Strict. The two domains must be exactly the same.

If it's missing

Relaxed (r).

Example

aspf=r

"A Return-Path at bounce.example.com counts as matching example.com."

The alignment diagram on the DKIM alignment page works the same way for SPF.

Good to know

Many email services use their own Return-Path domain. SPF then passes for them, not for you, so it can't align. DKIM signed with your domain is the fix.

RFC 9989, Section 4.4 (opens in a new tab)

Aggregate reports

In short: Where to send summary reports about email sent as your domain.

What it does

Receivers send XML reports, usually once a day, listing which servers sent email as your domain and whether it passed. The value is a comma-separated list of mailto: addresses.

Allowed values

Allowed values for rua=
Value Meaning
mailto:address Send reports to this address. Separate several with commas.

If it's missing

Receivers don't send aggregate reports for your domain. A record with no valid p= also gets ignored completely without a valid rua=.

Example

rua=mailto:[email protected]

"Send daily summary reports to [email protected]."

Good to know

If the address is on a different domain, such as a reporting service, that domain must allow it. It publishes a TXT record at example.com._report._dmarc.<their domain> starting with v=DMARC1. Without it, receivers ignore that address. An old size suffix such as !10m on the address is no longer used, and receivers ignore it.

RFC 9990, Section 4 (opens in a new tab)

Failure reports

In short: Where to send a report about each single email that fails.

What it does

Same format as rua=, but receivers send one report per failing message instead of a daily summary.

Allowed values

Allowed values for ruf=
Value Meaning
mailto:address Send failure reports to this address. Separate several with commas.

If it's missing

Receivers don't send failure reports.

Example

ruf=mailto:[email protected]

"Send a report for each failing email to [email protected]."

Good to know

These reports can contain parts of the real email, including personal details. Most receivers don't send them at all because of privacy concerns. The table used to call these "forensic reports".

RFC 9989, Section 10.2 (opens in a new tab)

Failure report options

In short: When a failure report should be sent.

Allowed values

Allowed values for fo=
Value Meaning
0 Send a report if both SPF and DKIM fail to give an aligned pass.
1 Send a report if either SPF or DKIM fails to give an aligned pass.
d Send a DKIM report if a DKIM signature failed, aligned or not.
s Send an SPF report if SPF failed, aligned or not.

You can combine values with a colon, such as 1:d. 0 and 1 can't be used together.

If it's missing

0.

Example

ruf=mailto:[email protected]; fo=1

"Send a failure report whenever SPF or DKIM fails to give an aligned pass."

Good to know

fo= does nothing without ruf=.

RFC 9989, Section 4.7 (opens in a new tab)

Test mode

In short: Ask receivers to apply your policy one step softer while you test it.

Allowed values

Allowed values for t=
Value Meaning
y Test mode. reject is applied as quarantine, and quarantine as none.
n Normal. Apply the policy as written.

If it's missing

n.

Example

v=DMARC1; p=reject; t=y

"I plan to reject failing email, but for now please only treat it as suspicious."

Good to know

Reports keep coming as normal in test mode, and t=y has no effect on a none policy. It replaces the old pct=0 trick.

RFC 9989, Section 4.7 (opens in a new tab)

Percentage (legacy)

In short: A removed tag that asked receivers to apply the policy to only some failing email.

What it does

pct= was removed in RFC 9989 because receivers rarely applied it accurately.

Allowed values

Old values for pct=
Value Meaning
0 to 100 Under the old standard, the percentage of failing email the policy applied to.

If it's missing

Nothing. It is no longer part of the standard.

Example

p=reject; pct=25

"Under the old standard: reject a quarter of failing email."

Good to know

Receivers following the current standard ignore it. Some older receivers may still use it. To test safely, use t=y instead.

RFC 9989, Appendix C (opens in a new tab)

Public suffix domain

In short: Says whether this domain is a public suffix, like co.za, where other people register their own domains.

Allowed values

Allowed values for psd=
Value Meaning
y This is a public suffix domain, run by a registry.
n This domain is the top of an organisation's own domain tree.
u Not stated. Receivers work it out with a DNS lookup up the domain tree.

If it's missing

u.

Example

v=DMARC1; p=reject; psd=n

"example.com is the top of our domain tree."

Good to know

Most domain owners never need to set this.

RFC 9989, Section 4.7 (opens in a new tab)

Report format and interval

In short: Two removed tags for the failure report format and how often to send aggregate reports.

What it does

RFC 9989 removed both. Receivers following the current standard ignore them.

If it's missing

Nothing. Leaving them out is correct.

Example

rf=afrf; ri=86400

"Under the old standard: failure reports in AFRF format, aggregate reports every 86400 seconds (one day)."

Good to know

This tool doesn't show these tags in the results table, even if your record has them. You can safely remove them from your record.

RFC 9989, Appendix C (opens in a new tab)