Skip to content

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

Record
Move one stage at a time, once reports show your mail passing.
Reject suits a domain that sends only from subdomains it knows.
DKIM alignment
SPF alignment
Addresses that receive aggregate XML reports. Separate them with commas.
Optional
Per-message reports. Not every receiver sends them.

Says this domain is the Organizational Domain for itself and its subdomains. Most domains leave it out.

TXT _dmarc

TXT value
v=DMARC1; p=none

What 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

  1. In the Cloudflare dashboard, open the domain's DNS Records page.
  2. Select Add record and choose TXT.
  3. Enter _dmarc as the name, paste the record as the content and leave TTL on Auto.
  4. 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.

The record is built in your browser. Reading the live record sends the domain to Cloudflare's DNS resolver, or to Google's if Cloudflare's doesn't answer. Your settings, report addresses included, go in the page address so you can share it.

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

Defaults and limits
ItemValueSource
Default for adkim adkim=rrfc-editor.org
Default for aspf aspf=rrfc-editor.org
Default for t t=nrfc-editor.org
Default for fo fo=0rfc-editor.org
Default for psd psd=urfc-editor.org
Tags RFC 9989 removed t=y replaces pct=0pct, rf, rirfc-editor.org
DMARC policy lookups per message, at most 8 queriesrfc-editor.org
SPF DNS-querying terms, at most 10rfc-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

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.

See what Nuxter includesFrom $249, one-time.