How to create a DMARC record
In brief
Create a DMARC record step by step: build the TXT record, pick a policy, publish it in DNS, and add reporting so you can safely enforce reject.

To create a DMARC record, add a DNS TXT record named _dmarc.yourdomain.com with the value v=DMARC1; p=none; rua=mailto:dmarc@yourdomain.com — then confirm it exists with a DMARC checker and start reading aggregate reports before you enforce a stricter policy.
DMARC (Domain-based Message Authentication, Reporting, and Conformance) is an email authentication protocol that tells receiving mail servers what to do with messages that fail SPF or DKIM checks. Without it, anyone can send email that appears to come from your domain.
What goes into a DMARC record?
A DMARC record is a DNS TXT record published at the subdomain _dmarc.yourdomain.com. It contains tags separated by semicolons. Two tags are required; the rest are optional but important.
Required tags
| Tag | Value | Purpose |
|---|---|---|
v | DMARC1 | Must appear first; identifies this as a DMARC record |
p | none / quarantine / reject | Policy to apply when a message fails authentication |
Commonly used optional tags
| Tag | Example | Purpose |
|---|---|---|
rua | rua=mailto:dmarc@example.com | Where to send daily aggregate (XML) reports |
ruf | ruf=mailto:dmarc@example.com | Where to send forensic failure reports (less commonly used) |
sp | sp=reject | Override policy for subdomains; if omitted, subdomains inherit p= |
adkim | adkim=s | DKIM alignment: r relaxed (default) or s strict |
aspf | aspf=s | SPF alignment: r relaxed (default) or s strict |
fo | fo=1 | Failure reporting options; fo=1 generates a report on any single auth failure |
pct | pct=25 | Percentage of failing mail the policy applies to — useful for staged rollout |
Note onpct: RFC 9989 (published May 2026, the Standards Track update to RFC 7489) removed thepcttag from the specification. Major providers still honour it for now, but it is not guaranteed to behave consistently across all receivers. Prefer staged rollout through policy escalation (none→quarantine→reject) rather than relying onpct.
How alignment modes work
adkim and aspf control how strictly the From domain must match the authenticated domain:
- Relaxed (
r, default): The organizational domain must match.mail.example.comaligns withexample.com. - Strict (
s): An exact match is required.mail.example.comdoes not align withexample.com.
Step-by-step: how to create a DMARC record
Step 1 — Confirm SPF and DKIM are in place
DMARC builds on top of SPF and DKIM. If neither is configured, DMARC has nothing to verify against and every message will fail. Check your current setup with the SPF checker and DKIM checker before proceeding. If you need to set them up first, start with what are DMARC, DKIM, and SPF.
Step 2 — Build your starting record
For a first deployment, use p=none so you collect reports without affecting mail delivery. The minimum viable record is:
v=DMARC1; p=none; rua=mailto:dmarc@yourdomain.comAdd fo=1 to get failure reports on any authentication issue, not just complete DMARC failures:
v=DMARC1; p=none; rua=mailto:dmarc@yourdomain.com; fo=1Use the free DMARC generator to produce a record with the exact tags you need and copy the result.
Step 3 — Publish the TXT record in DNS
Log in to your DNS provider (Cloudflare, GoDaddy, Google Domains, or your registrar's DNS panel) and add a new TXT record:
| Field | Value |
|---|---|
| Type | TXT |
| Host / Name | _dmarc (some providers need the full _dmarc.yourdomain.com) |
| Value | v=DMARC1; p=none; rua=mailto:dmarc@yourdomain.com; fo=1 |
| TTL | 3600 (1 hour) is fine; lower for faster iteration during testing |
Save the record. DNS propagation typically completes within minutes to a few hours, though up to 48 hours is possible.
Step 4 — Verify the record is live
Use the DMARC checker or run a DNS lookup for _dmarc.yourdomain.com TXT records. You should see your record returned verbatim.
Top: a monitoring-only starting record. Bottom: a final enforcement record with strict alignment.
Step 5 — Read reports and fix authentication gaps
Aggregate reports arrive daily (usually as gzip-compressed XML) at the rua address. They show every IP that sent mail claiming to be from your domain and whether SPF/DKIM passed for each. Read how to understand DMARC reports for a field-by-field walkthrough.
Use the reports to find any legitimate sending services that are not yet covered by SPF or DKIM, then fix their authentication before tightening the policy.
Step 6 — Escalate the policy
Once your reports show all legitimate mail passing consistently:
- Move to
p=quarantine— failing mail routes to spam instead of the inbox. - Watch for a week or two. If no legitimate mail fails, move to
p=reject. - With
p=rejectin place, spoofed mail is refused at the SMTP level and never delivered.
The p= tag in your DMARC record sets which policy receivers apply to failing email.
A conservative, report-driven rollout protects legitimate email delivery at each stage.
Common issues with DMARC records
Record not found after publishing
If the DMARC checker returns "no record found" right after you publish, DNS has not propagated yet — wait up to 30 minutes and check again. If it stays missing after an hour, confirm that the host field is set to _dmarc (not _dmarc.yourdomain.com when the provider auto-appends the domain), that the record type is TXT (not CNAME), and that you saved in the correct zone.
Syntax errors causing the record to be ignored
A single character mistake — a missing semicolon, a space inside mailto:, or v=dmarc1 with a lowercase 'd' — causes receivers to ignore the record entirely. Copy your record into the DMARC checker to catch syntax problems before they affect mail. The v tag must equal exactly DMARC1 (case-sensitive) and must be the first tag in the string.
Aggregate reports not arriving
Check that the rua mailbox exists and can receive external mail. Some organisations use a dedicated address like dmarc-reports@yourdomain.com — make sure it is not over quota and that your mail server accepts XML attachments. If reports still do not appear after 48 hours, verify the rua=mailto: URI is syntactically correct (no spaces, valid address). You can also check your email security score to confirm the record is being read by validators.
Subdomain policy confusion
If you have not set the sp= tag, subdomains inherit the main p= policy. A p=reject record without sp= will also apply reject to mail.subdomain.yourdomain.com — which can break mail sent from those subdomains if they are not yet fully authenticated. Set sp=none explicitly while you work through subdomain authentication, then tighten it once reports confirm those senders are clean. The article on DMARC subdomains and the sp tag covers this in detail.
Ready to enforce your DMARC policy?
Creating the record is the easy part — the work is reading reports and fixing every legitimate sender until the data supports enforcement. Check where your domain stands right now with the free Email Security Score, or use the DMARC generator to build a record tailored to your setup.
Questions readers ask
Frequently asked questions

Written by
Taylor TabusaCo-Founder & Head of Business Development, Palisade
Taylor Tabusa is the co-founder and Head of Business Development at Palisade, helping managed service providers turn email security into a practical, valuable service.
More from Taylor →


