Check a domain

How it works

what each policy actually does to failing mail
p=nonenothing
p=quarantineto spam
p=rejectbounced
reject + t=ynot enforced
sp=nonesubs open
A reject policy carrying t=y is not enforced at all. The dashboard still says "reject".
01

Start at p=none

Publish with a rua address and read reports for two weeks before tightening anything.

02

Move to quarantine

Failing mail goes to spam rather than the inbox. This is the working default for sending domains.

03

Reach reject

The only policy that actually stops spoofing. Your brand domain should end here.

04

Cover subdomains

Without sp, subdomains inherit p. With sp=none they are wide open. Add np to cover subdomains that do not exist.

The gap between having DMARC and enforcing it

Most domains that "have DMARC" have p=none. That is a monitoring policy. It asks receivers to report on failures and to do nothing about them. It is the correct starting point and a poor destination, but because it appears in every checker as a valid record, it gets treated as a finished job.

Two tags quietly undo an otherwise strict policy. sp sets the subdomain policy — publish p=reject; sp=none and your root domain is locked while every subdomain is open for spoofing. t is the testing flag: p=reject; t=y tells receivers the policy is provisional and should not be applied at all, so a domain that reads as reject enforces nothing. The old pct tag did something similar by applying the policy to a share of failing mail; it was deprecated in RFC 9989, but plenty of records still carry it, and p=reject; pct=10 means one message in ten.

Why this matters more than it used to

Google and Microsoft's bulk sender requirements made DMARC a baseline expectation rather than an advanced measure. A domain with no DMARC record now reads as an unmaintained domain, which is precisely the signal you do not want attached to a cold email sending fleet.

For sending domains, p=quarantine is the practical default. It signals a maintained, authenticated domain without risking hard bounces on your own outbound mail. Your primary brand domain is the one that should reach p=reject — it is the domain people actually spoof, and reject is the only policy that stops them.

One thing worth checking before you tighten: the rua address. Without it you get a policy and no visibility. You will not know which senders are failing until something breaks and someone complains.

How to check a DMARC record manually

DMARC is published as a TXT record on the _dmarc subdomain — not on the root domain, which is where most failed lookups go wrong. You can query it directly:

  • macOS or Linuxdig +short TXT _dmarc.example.com
  • Windowsnslookup -type=TXT _dmarc.example.com
  • No terminal — paste the domain into the box above and it resolves over DNS-over-HTTPS from your browser.

A valid record begins with v=DMARC1, and there must be exactly one of them. If two TXT records at _dmarc both start with v=DMARC1, receivers are required to ignore both and treat the domain as having no DMARC policy at all. A duplicate record is worse than no record, because everything on your side looks configured.

Checking a whole sending fleet at once

The box above takes one domain per line, so an entire list of sending domains can be graded in a single pass rather than one lookup at a time. Email addresses work too — the domain is extracted automatically, which means a raw list of sending inboxes can be pasted in as-is.

This is the check that actually matters at fleet scale. Domains bought in batches and set up months apart drift: one family gets p=quarantine, another gets left at p=none from a template that was never updated, and a third has a rua pointing at a mailbox nobody reads. Nothing surfaces that except looking at all of them side by side.

Every DMARC tag, and which ones actually matter

The specification changed in May 2026. RFC 9989, 9990 and 9991 replaced RFC 7489, which had defined DMARC since 2015. Records still begin with v=DMARC1 and everything published under the old spec remains valid — but three tags are now deprecated and three new ones exist.

TagWhat it controlsStatus
vProtocol version. Must be the first tag or the record is invalid.Current
pPolicy applied to mail failing authentication on the root domain.Current
spPolicy for existing subdomains. Omitted, they inherit p.Current
npPolicy for subdomains that do not exist in DNS at all — the route used to spoof addresses like ceo.yourdomain.com. Falls back to sp, then p, if unset.New in RFC 9989
ruaWhere aggregate reports are sent. Without it you have a policy and no visibility.Current
adkimDKIM alignment mode. Relaxed allows a parent domain; strict demands an exact match.Current
aspfSPF alignment mode, same relaxed or strict logic on the Return-Path domain.Current
tTesting flag. t=y tells receivers the policy is provisional and should not be enforced; t=n is the default and enforces normally.New in RFC 9989
psdMarks a public suffix domain. Leave unset unless you actually operate one.New in RFC 9989
rufFailure (forensic) reports. Most large receivers no longer send them.Current, rarely honoured
pctApplied the policy to a share of failing mail. Receivers implemented it inconsistently, so it was replaced by the binary t flag.Deprecated
rf, riReport format and reporting interval. Ignored in practice and moved out of the core spec.Deprecated

Practically, three things follow. Remove pct, rf and ri at your next DNS pass — they no longer do anything useful, and a stalled pct=10 is a rollout that was never finished. Consider adding np=reject, which blocks spoofing from subdomains that do not exist without touching your main policy. And note that receiver support for the new tags rolls out gradually, so treat np and t as additions rather than replacements for a correct p and sp.

For a sending domain, four tags still carry the entire outcome: p, sp, rua and — where subdomains matter — np.

Why DMARC fails when SPF and DKIM both pass

This is the most common confusion in email authentication, and the answer is alignment. DMARC does not ask whether SPF and DKIM passed. It asks whether either of them passed for the same domain the recipient sees in the From header.

SPF is evaluated against the Return-Path — the envelope sender — which your sending platform frequently sets to a domain of its own. DKIM is evaluated against the d= value in the signature, which is your domain only if you published that platform's DKIM keys under it. So if the platform authenticates as bounce.sendingtool.com while the From header reads you@yourdomain.com, both checks pass on their own terms and DMARC still fails, because neither passing domain aligns with the visible one.

Either fix resolves it on its own: publish the provider's DKIM keys under your domain so d= matches, or configure a custom Return-Path — usually a CNAME the provider hands you — so SPF aligns. DMARC only needs one aligned pass. Verify signing with the DKIM checker and authorisation with the SPF checker.

What each finding means

FindingWhat it meansWhat to do
No DMARC record foundNothing published at _dmarc. Receivers apply no policy and you get no reports.Publish a record starting at p=none with a working rua.
Multiple DMARC recordsTwo or more TXT records at _dmarc begin with v=DMARC1. Receivers discard all of them.Delete every record but one. Verify from a second resolver afterwards.
Record on the wrong hostPublished at the root domain instead of _dmarc, often because the DNS panel appends the domain automatically.Host must resolve to _dmarc.yourdomain.com exactly.
p=noneMonitoring only. Failing mail is delivered normally.Correct as a starting point, wrong as a destination. Tighten once reports are clean.
pct presentA partial rollout that was never finished — p=reject; pct=10 enforced on one message in ten. The tag is deprecated as of RFC 9989.Remove it and enforce fully, or use t=y to signal the policy is provisional.
sp=noneRoot domain locked, every subdomain wide open for spoofing.Remove sp so subdomains inherit p, or set it explicitly.
No rua addressA policy with no telemetry. You will not know which senders fail until something breaks.Add a rua mailbox you actually read, or a reporting service.
Syntax errorMissing v=DMARC1 prefix, a stray semicolon, or smart quotes pasted from a document.Rebuild it with the DMARC generator and paste as plain text.

Frequently asked questions

What does p=none actually do?

Nothing to the mail. It asks receivers to send you aggregate reports about messages that fail authentication, while delivering them normally. It is the right place to start so you can find legitimate senders you forgot about, but it provides no protection against spoofing.

How long before I move from none to quarantine?

Two weeks of clean aggregate reports is a reasonable minimum for an established domain. What you are looking for is any legitimate sender failing — a CRM, a helpdesk, an invoicing tool. Once reports show only your intended senders passing, move to quarantine. For a fresh cold email sending domain with exactly one sending provider, you can start at quarantine immediately.

Do I need a DMARC record on every sending domain?

Yes. DMARC is published per domain and is not inherited from anywhere. Every sending domain in a cold email fleet needs its own record. Bulk-generating them is straightforward — the DMARC generator produces copy-ready records.

My rua points to an external reporting service and I get no reports. Why?

When the rua address is on a different domain from the one publishing the policy, that external domain must authorise it with a record at yourdomain.com._report._dmarc.theirdomain.com. Without it, receivers are required to discard the reports. Reporting vendors usually document this step, and it is the most common reason reports never arrive.

How can I check my DMARC record?

Paste the domain into the box above, or query DNS directly with dig +short TXT _dmarc.yourdomain.com on macOS and Linux, or nslookup -type=TXT _dmarc.yourdomain.com on Windows. The record lives on the _dmarc subdomain, never on the root domain — querying the root is the most common reason a lookup comes back empty on a domain that is correctly configured.

Where can I find my DMARC record?

In your DNS zone, as a TXT record with the host _dmarc. Most DNS panels append the domain automatically, so entering _dmarc produces _dmarc.yourdomain.com — entering the full hostname often produces _dmarc.yourdomain.com.yourdomain.com, which resolves to nothing. If you registered elsewhere but use Cloudflare or another provider for DNS, the record must live wherever your nameservers currently point.

What is DMARC used for?

It tells receiving mail servers what to do with messages that claim to come from your domain but fail authentication, and it gives you reports on who is sending as you. SPF and DKIM establish whether a message is authentic; DMARC is the layer that acts on the answer and makes the result visible. Without it, a failed check is information no one uses.

What is the difference between DMARC and SPF?

SPF lists which servers may send for your domain and is checked against the envelope sender, which recipients never see. DMARC is checked against the From address they do see, requires SPF or DKIM to pass for that same domain, and specifies a consequence for failure. SPF on its own can pass while a message is still visibly spoofed — that gap is precisely what DMARC exists to close.

Why does DMARC fail when SPF and DKIM pass?

Alignment. DMARC does not care that SPF and DKIM passed, only whether one of them passed for the domain in the From header. Sending platforms often use their own Return-Path for SPF and their own d= domain for DKIM, so both checks pass against the platform's domain while your From domain remains unauthenticated. Publish the provider's DKIM keys under your domain, or set a custom Return-Path — either one alone satisfies DMARC.

What counts as a DMARC failure?

A message fails DMARC when neither SPF nor DKIM produces an aligned pass for the From domain. That covers genuine spoofing, but far more often it is your own mail: a forwarded message that broke the SPF chain, a CRM or invoicing tool nobody added to the record, or a mailing list that rewrote headers. Aggregate reports are what separate the two, which is why the rua tag matters more than the policy on day one.

How do I test whether DMARC is actually working?

Check the record itself with this tool, then send a message to an address you control and open the raw headers. The Authentication-Results line will show dmarc=pass or dmarc=fail along with the policy applied. The header analyzer parses that for you. Aggregate reports arriving at your rua address within a day or two are the other confirmation that receivers are honouring the record.

Is DMARC mandatory now?

Not legally, but effectively yes for anyone sending at volume. Google and Microsoft's bulk sender requirements put a DMARC record on the baseline list for domains sending meaningful volume to their users, and a domain without one increasingly reads as unmaintained. For cold email specifically, treat it as required — the absence of a record is a signal you do not want attached to a sending fleet.

Can I have two DMARC records on one domain?

No. If two TXT records at _dmarc both begin with v=DMARC1, receivers must ignore both and the domain is treated as having no policy at all. This usually happens when a record is added through a control panel while an older one already exists further down the zone. Delete every duplicate so exactly one remains, then re-check.

What is a good DMARC record to start with?

v=DMARC1; p=none; rua=mailto:dmarc@yourdomain.com — monitoring only, with a reporting address so you can see what is failing before you enforce anything. Once reports show only your intended senders, move to p=quarantine. The DMARC generator builds copy-ready records for any stage of that rollout.

Does DMARC affect deliverability?

Indirectly, and in your favour. DMARC does not improve placement for mail that already authenticates, but its absence is now read as a maintenance signal by the large receivers, and a strict policy protects the domain reputation you are building from being burned by spoofed mail. What it will not do is fix placement problems caused by content, list quality or volume — for those, start with the blacklist checker.

Do I still need DKIM if I have SPF and DMARC?

Yes. SPF breaks on forwarding because the forwarding server becomes the envelope sender, and any message forwarded through a mailing list or an auto-forward rule loses its aligned SPF pass. DKIM survives forwarding as long as the message body is unmodified, so it is what keeps DMARC passing in the cases SPF cannot cover. Running both is the point of the design.

Can I check DMARC for multiple domains at once?

Yes — paste one domain per line into the box above and each is looked up and graded separately. Email addresses are accepted too, with the domain extracted automatically, so a list of sending inboxes can go in unedited. This is the fastest way to spot policy drift across a sending fleet where domains were set up in batches at different times.

How long does a DMARC change take to take effect?

As long as the TTL on the TXT record, usually somewhere between five minutes and an hour, plus however long resolvers hold the previous answer. Set a low TTL before making changes if you expect to iterate. Note that receivers cache DMARC policy independently of your DNS TTL in some cases, so allow a day before concluding a change did not apply.

What changed in the 2026 DMARC standard?

In May 2026 the IETF published RFC 9989, 9990 and 9991, replacing RFC 7489 from 2015 and moving DMARC from Informational status onto the standards track. Existing records stay valid and still begin with v=DMARC1. Three tags were deprecated — pct, rf and ri — and three added: np, t and psd. Organizational domain discovery also moved from the Public Suffix List to a DNS tree walk, which is a receiver-side change most senders will never notice.

Should I remove the pct tag from my DMARC record?

Yes. pct is deprecated under RFC 9989 because receivers implemented it inconsistently — in practice only 0 and 100 behaved predictably. If your record sits at pct=100, delete the tag; the behaviour is identical. If it sits below 100, you have an unfinished rollout: either commit to enforcement and drop the tag, or publish t=y to signal the policy is provisional.

What is the np tag in DMARC?

np sets the policy for subdomains that do not exist in DNS at all — the gap attackers used to spoof plausible-looking addresses such as billing.yourdomain.com that were never registered. It is new in RFC 9989 and falls back to sp, then p, when unset. Adding np=reject is a low-risk change for most domains, since no legitimate mail originates from a subdomain that does not exist.

Last reviewed

Related tools

What to run next

The checks that most often follow this one.

Auth checkers

More in this category

Read more

Guides that go deeper

Services

When the tools tell you something is wrong

The diagnostics here are free and always will be. When the fix is bigger than a DNS record, this is the work I do.

Get in touch

Start with a call

Bring a domain and the symptom. I will tell you what is actually wrong and whether you need me at all — plenty of people leave that call able to fix it themselves.

Thirty minutes, no pitch

We will run the checks together on your actual domains, and you will leave knowing what is broken, what it takes to fix, and what it should cost. If that is a job you can do in-house, I will say so.

Based inRangpur, Bangladesh — all time zones
RepliesWithin one business day
LicensingWorkspace below list price
Back to top