DMARC Record Generator with a Staged Rollout
A DMARC record generator built on RFC 9989. Roll out with t=y instead of pct, set np and report addresses, compare with your live record and build SPF too.
- Asks Cloudflare DNS
- Falls back to Google DNS
Checked
01Tool
Tool
Says this domain is the Organizational Domain for itself and its subdomains. Most domains leave it out.
TXT _dmarc
v=DMARC1; p=noneWhat it says
- Receivers handle failing mail as usual and send you reports.
- Existing subdomains follow p.
- Subdomains that don't exist follow sp, or p without it.
- DKIM and SPF alignment are both relaxed.
- No aggregate reports. Add an address to see who sends as your domain.
What changes for your mail
Nothing changes for delivery. Reports start to arrive and show every server sending as your domain.
Compared with the live record
Enter the domain to compare with the record it publishes now.
Publish it on Cloudflare
- In the Cloudflare dashboard, open the domain's DNS Records page.
- Select Add record and choose TXT.
- Enter _dmarc as the name, paste the record as the content and leave TTL on Auto.
- Select Save. If a _dmarc record already exists, edit it instead, so there is only ever one.
Need somewhere to send reports? Cloudflare DMARC Management is available on every plan for domains on Cloudflare DNS. It adds its own rua address to your record and shows each source sending as you.
02Guide
How it works
The tags after RFC 9989
A DMARC record is a TXT record at _dmarc.<domain> made of tag=value pairs separated by semicolons, and v=DMARC1 must come first. p is the policy for the domain, sp for its existing subdomains and np for subdomains that don't exist. adkim and aspf choose relaxed or strict alignment, rua and ruf say where reports go, and fo says when a failure report is wanted. t=y marks the policy as a test.
The generator leaves out every tag set to its default and never writes pct, rf or ri, which RFC 9989 removed.
Rolling out with t=y
Start at p=none with a report address, and read the reports until every server that sends as you passes. Then take each stricter policy in two steps: first with t=y, which asks receivers to apply it one level down, then without. That makes four steps after monitoring: test quarantine, quarantine, test reject and reject.
For a domain whose people post to mailing lists, RFC 9989 suggests at least a month at none and as long again at quarantine before reject. A domain that only sends transactional mail has few senders to account for, so it can usually move faster.
Subdomains and np
A spoofer who can't send as your domain may try a name like billing.<domain> that doesn't exist. np=reject asks receivers to refuse that mail without changing how the subdomains you use are treated.
A record published on a subdomain applies to that subdomain. Receivers fall back to the parent's record, read through sp or np, only when the subdomain has none of its own.
Reports, and authorizing another domain
Aggregate reports are XML files that list, for each sending IP address, how many messages passed or failed SPF, DKIM and DMARC. They go to the rua addresses, and they are hard to read by hand, so most people point rua at a report service.
When an address is on another domain, that domain must publish a TXT record at <your domain>._report._dmarc.<its domain> containing v=DMARC1;, or receivers won't send to it. A report service can publish one wildcard record that accepts reports for every domain.
Check what you published
Once the record is live, run the SPF, DKIM and DMARC checker with your provider's preset. It finds the policy the way receivers do, follows your SPF includes and checks that every outside report address has authorized your domain.
03Rates
The numbers it uses
| Item | Value | Source |
|---|---|---|
| Default for adkim | adkim=r | rfc-editor.org |
| Default for aspf | aspf=r | rfc-editor.org |
| Default for t | t=n | rfc-editor.org |
| Default for fo | fo=0 | rfc-editor.org |
| Default for psd | psd=u | rfc-editor.org |
| Tags RFC 9989 removed t=y replaces pct=0 | pct, rf, ri | rfc-editor.org |
| DMARC policy lookups per message, at most | 8 queries | rfc-editor.org |
| SPF DNS-querying terms, at most | 10 | rfc-editor.org |
04Questions
Questions
- What should my first DMARC record be?
- Publish p=none with a rua address you can read, such as v=DMARC1; p=none; rua=mailto:dmarc@yourdomain.com. It changes nothing about delivery and starts the reports that show who sends as your domain. Tighten it only once those reports show your own mail passing.
- What replaced pct in DMARC?
- The t tag. RFC 9989 removed pct because receivers applied values between 0 and 100 inconsistently. t=y keeps the useful part of pct=0, asking receivers to apply the policy one level down while some intermediaries rewrite the From header.
- What does np mean in a DMARC record?
- np is the policy for subdomains that don't exist. Without it, they follow sp, or p when there is no sp. Setting np=reject stops mail from made-up subdomains without changing how the subdomains you use are treated.
- Do I need a rua address?
- Not for the policy to work, but without one receivers send you no aggregate reports, and you can't tell when tightening the policy would block your own mail. Use an address on your domain, a report service, or Cloudflare DMARC Management if your DNS is on Cloudflare.
- How do I send DMARC reports to another domain?
- List the address in rua as usual, then have the receiving domain publish a TXT record at yourdomain._report._dmarc.theirdomain with the value v=DMARC1;. Receivers check for it before they send reports outside your domain. The generator writes that record for each outside address.
- Should I use p=reject?
- For a domain that only sends transactional mail from systems you control, reject is the goal once reports are clean. RFC 9989 advises domains whose people post to mailing lists not to publish it, and a domain with p=reject must sign its mail with DKIM rather than rely on SPF alone.
05Sources
Sources
Every fact on this page was read from these pages on .
- RFC 9989, section 4.7, DMARC Policy Record Formatrfc-editor.org/
rfc/ rfc9989#section-4.7 - RFC 9989, section 7.4, Interoperability Considerationsrfc-editor.org/
rfc/ rfc9989#section-7.4 - RFC 9989, appendix A.6, Removal of the "pct" Tagrfc-editor.org/
rfc/ rfc9989#appendix-A.6 - RFC 9989, appendix C.5, Tagsrfc-editor.org/
rfc/ rfc9989#appendix-C.5 - RFC 9990, section 4, Verifying External Destinationsrfc-editor.org/
rfc/ rfc9990#section-4 - RFC 7208, section 4.6.4, DNS Lookup Limitsrfc-editor.org/
rfc/ rfc7208#section-4.6.4 - Cloudflare docs, Manage DNS recordsdevelopers.cloudflare.com/
dns/ manage-dns-records/ how-to/ create-dns-records/ - Cloudflare docs, DMARC Managementdevelopers.cloudflare.com/
dmarc-management/ - Cloudflare Email Service docs, Domain configurationdevelopers.cloudflare.com/
email-service/ configuration/ domains/ - Resend docs, Implementing DMARCresend.com/
docs/ dashboard/ domains/ dmarc - Google Workspace Admin Help, Set up SPFknowledge.workspace.google.com/
admin/ security/ set-up-spf - Microsoft Learn, Set up SPF for your Microsoft 365 domainlearn.microsoft.com/
en-us/ defender-office-365/ email-authentication-spf-configure - Amazon SES docs, Using a custom MAIL FROM domaindocs.aws.amazon.com/
ses/ latest/ dg/ mail-from.html
Found something out of date? Tell us.
Nuxter
Building a SaaS on Nuxt?
Nuxter's mail goes out through its Cloudflare Email Service or Resend adapter. Publish this record beside the SPF and DKIM records they ask for, and move it a stage at a time.