DMARC setup, start to finish
Last updated 2026-08-26
Publishing a DMARC record takes two minutes. Getting to p=reject without
deleting your own invoices takes about six weeks, and almost all of it is finding out who
sends mail as you.
Should you start at p=none? Yes, and stop reading if that is
all you came for. Publish this at _dmarc.example.com, change nothing else,
and come back in two weeks:
Monitoring changes nothing about delivery. It cannot cause a message to be rejected. The only thing it does is ask receivers to start sending you daily XML reports about mail claiming to be from your domain.
Step 0: write down who sends as you
Before DNS, spend twenty minutes on a list. Ask finance what sends invoices, ask marketing which platform they moved to last year, ask whoever owns the monitoring stack. You will be wrong, and the reports will correct you, but starting with eight known senders and finding three surprises is a much better position than starting with zero and finding eleven.
The usual list: your mailbox provider, one marketing platform, one transactional provider, a helpdesk, a CRM, an HR or payroll system, a monitoring or alerting tool, and something nobody remembers procuring. The provider pages cover the setup for the common ones.
Step 1: publish the record
One TXT record at _dmarc. If your DNS panel already appends the domain, the
name is just _dmarc, and if it does not, it is
_dmarc.example.com. Getting that wrong produces
_dmarc.example.com.example.com, which is invisible to receivers and which I
have watched people stare past for an hour.
Exactly one string, starting v=DMARC1. Two records at that name means
receivers ignore both. Our DMARC checker reads every
tag back to you and flags the ones that leave a gap.
The rua= address has to be able to receive a few hundred XML attachments a
week and you have to be willing to read them. If neither is true, point it at
our weekly digest. It parses the reports and mails
you one summary, free for one domain.
Step 2: read the reports for two weeks
Two weeks, not two days. Monthly senders exist, and the payroll run that fails is always the one on the 28th. What you are building is a table with one row per sending source and three columns: what it is, whether SPF aligns, whether DKIM aligns.
Reading a report by hand walks through the XML. The one thing to internalise now: a source can pass SPF and still fail DMARC, because DMARC needs the passing check to match your From domain. Alignment is where most of the work goes.
Step 3: fix the senders
For each source that fails, one of four things is true.
- It is a service you use and it supports domain authentication. Turn it on. This is most of them, and it is usually two CNAME records.
- It is a service you use and it does not. Rare, and a reason to change supplier. In the meantime you can sometimes get SPF alignment by having it use a return-path on your domain, or route its mail through your own server.
- It is forwarding. Recipients forwarding your mail elsewhere show up as SPF failures with DKIM passing. If DKIM passes, DMARC passes, and there is nothing to fix. This is the strongest practical argument for getting DKIM right everywhere.
- It is not yours. Someone spoofing your domain. There is nothing to fix and it is the reason you are doing this.
Work down the list by volume. The top three sources are usually 95% of your mail, and the long tail of single-message sources is mostly spoofing and forwarding noise.
Step 4: move to quarantine
All four of these have to be true before I move a domain to quarantine:
- Aligned pass rate above 98% of message volume for two consecutive weeks.
- Every source above 1% of volume identified by name and aligned.
- No new unidentified source in the last seven days.
- The monthly senders have run at least once inside the observation window.
You can ease into it with pct=25, which asks receivers to apply the policy to
a quarter of failing messages. Handling of that tag has always been uneven between
receivers, and the revision of DMARC now working through the IETF drops it, so treat it as
a comfort blanket rather than a control. If you are not confident enough to go to 100,
you are not ready to leave p=none.
Two weeks at quarantine. Watch the reports and watch your helpdesk. What you are listening for is somebody saying a partner stopped receiving something, because quarantined mail goes to spam where a human can still find it. That grace disappears at the next step.
Step 5: reject
Same criteria, tighter numbers: 99%+ aligned for two weeks at quarantine, and no unexplained failures at all in the last week. Then change one word.
Keep rua=. Reject is the state where receivers refuse a new sender's mail
and no bounce reaches you, so the reports are your only instrumentation. This is also the point at which a weekly
summary earns its place, because nobody keeps reading raw XML week after week.
Subdomains, which is where this goes wrong
Your policy applies to subdomains unless you say otherwise with sp=. Once
the parent reaches p=reject, receivers refuse mail from a marketing platform
on news.example.com that somebody configured before you started this, and
the person who set it up three years ago does not work here any more.
Two clean approaches. Publish a separate DMARC record on the subdomain with its own
policy, which is precise and visible. Or set sp=none temporarily on the
parent while you sort it out, which is blunt, wide open, and needs a date attached. What
you should not do is leave the parent policy weakened to accommodate one subdomain.
Wildcard-style protection for subdomains you never send from is worth publishing early:
a DMARC record on the parent with sp=reject stops
accounts.example.com being invented by someone else, at no cost to you if
nothing legitimate sends from a subdomain.
The policies, side by side
| Policy | Receiver does | Failing mail | Move on when |
|---|---|---|---|
| p=none | Delivers, reports | Arrives normally | 98% aligned, 2 weeks, all big senders known |
| p=quarantine | Delivers to spam | Recoverable by the recipient | 99% aligned, 2 weeks, nothing unexplained |
| p=reject | Refuses at SMTP | Gone, sender gets a bounce | You are done |
What goes wrong on the way to p=reject
- SPF breaks at eleven lookups. The record reads fine and returns permerror, so DMARC has only DKIM to work with and half your sources start failing for no visible reason. The lookup guide has the fix.
-
Strict alignment set by accident.
adkim=sandaspf=slook like the responsible choice and break every subdomain sender you have. Leave them off unless you have a specific reason. - The rua mailbox nobody reads. Reports going to a distribution list that three people have filtered into a folder is the same as no reports.
- Stopping at quarantine. It is a waypoint. A domain that sits at quarantine for a year has taken the deliverability risk without collecting the protection.
Compliance and the bulk sender rules are what got you here. The reason to finish is bigger: until you are at reject, anyone can put your domain on an invoice email and your customers have no way to tell. Six weeks of careful work buys that, and it holds for as long as you keep the record current when your senders change. The only hard part is the inventory.
Run the ramp on real reports
Every step in this guide depends on a few weeks of aggregate reports. We parse them and mail you a weekly summary: the senders that used your domain, what failed, and when tightening the policy is safe. Paid plans email you the day a new source first fails. Your first domain is free.
Get the weekly digestNo card · 12+ months of history · The free plan does not expire
Questions
Can I publish p=reject straight away?
You can, and on a domain that has never sent mail you should. On a domain with real mail flow you will silently delete legitimate messages from senders you have forgotten about, and nobody will tell you, because rejected mail does not generate a support ticket from the person who never received it.
How long does the whole ramp take?
Four to eight weeks for a normal company. Two weeks at p=none to see who sends, two to four weeks fixing senders, two weeks at quarantine, then reject. Larger organisations with acquisitions and legacy subdomains take longer, and the delay is always sender inventory rather than DNS.
Does DMARC stop people spoofing my domain?
It stops direct spoofing of your exact domain at receivers that honour the policy, which is most large ones. It does nothing about lookalike domains, display name spoofing, or a compromised account sending real authenticated mail.
Do I still need the rua tag once I am at reject?
Yes, more than before. Reject is the state in which a new misconfigured sender fails invisibly. Reports are the only thing that tells you it happened.
Keep reading
Checking as you go? The DMARC checker reads the policy you are ramping, the SPF and DKIM checkers show whether your senders will survive it, and the report analyzer reads an aggregate report you already have. No signup.
DomainCanary is a DMARC monitoring service that turns your domain's aggregate reports into one weekly email.