DMARC Record Generator
Build your DMARC record for RFC 9989, starting from the one you publish now, and see what receivers will do with mail that fails.
Loads the record at _dmarc of your domain into the form. Or build one below: it updates as you change anything.
Built in your browser. Only DNS questions leave it, over HTTPS to Cloudflare's resolver (Google's as a second opinion).
An example record for example.com
Type your domain above to start from what it publishes now, or change anything below. The record on the right updates as you go.
Failure reports and more
psd= is for public suffix operators only, so it isn't offered.
What happens to mail that fails DMARC
Mail that passes is never affected. For mail that fails, receivers read your record like this:
A policy is a request: receivers make the final call. With Honor DMARC record policy on, as Microsoft recommends, Microsoft 365 refuses reject failures with 550 5.7.1 and sends quarantine failures to Junk.
Rollout
- 1Monitor
p=nonep=none with reports, at least a monthnowYou are here - 2Test
p=quarantine; t=yquarantine with t=y: optional - 3Quarantine
p=quarantineat least as long as you monitored - 4Reject
p=rejectif your users don't post to mailing lists
Before you publish
One record, with nothing receivers would skip or misread.
Where your reports go
Receivers send reports to another organization's address only if it publishes a permission record.
Report services publish one record that covers every domain, so their addresses usually show Authorized at once.
Where do I paste this?
Pick your DNS host: the fields below are written the way its form wants them.
_dmarc.example.com. 3600 IN TXT "v=DMARC1; p=none; rua=mailto:dmarc@example.com"
After you publish
How do I create a DMARC record?
Publish one TXT record named _dmarc at your domain, starting with v=DMARC1, a policy and an address for reports: generate a DMARC record with the tool above, and it works as soon as your DNS host serves it.
Check that your mail already passes SPF or DKIM, then start at p=none with a rua address you read: receivers keep delivering as before and send you daily reports of who sends as your domain.
Read the reports for at least a month, fix every legitimate sender that fails, then move to quarantine and reject. One record at your organizational domain covers its subdomains too.
- 1Publish at _dmarc
_dmarc.example.com · TXTv=DMARC1; p=none; rua=mailto:dmarc@example.com - 2Receivers look it upTXT query
_dmarc.example.com - 3They apply your policyp=none → delivered
- 4Reports come back dailyaggregate report (XML, daily)dmarc@example.com

Start from what you publishLoad reads _dmarc from your browser and fills the form; nothing goes through our server.Every tag, colouredEach part of the record matches its setting: hover one to find the other.What changed and whyTags RFC 9989 removed are dropped, each with its reason.Copy it the way your host wantsHost, type and value, each with a copy button, rewritten for your DNS host.Report addresses, checkedAn address at another organization is flagged, and its permission record is checked live.Which DMARC policy should I use: none, quarantine or reject?
Start at none with reports, move to quarantine once every legitimate sender passes, and to reject when you're sure: RFC 9989 asks for at least a month at none and as long again at quarantine.
none changes nothing about delivery; quarantine sends failing mail to spam; DMARC reject refuses it. A policy is a request: receivers make the final call, and the DMARC policy generator above dates each step from today.
Domains whose users post to mailing lists SHOULD NOT use reject, because lists that change messages break DMARC for them. Google suggests a faster path (one week at none, then a small share at quarantine).
- 1Monitor
p=none; rua=…at least a monthnowDelivered, and reported - 2Test
p=quarantine; t=yoptionalOne level less - 3Quarantine
p=quarantineat least as long againno sooner than Dec 4, 2026Spam folder - 4Reject
p=rejectif your users don't post to listsno sooner than Jan 4, 2027Refused
What changed in DMARC with RFC 9989?
RFC 9989 (May 2026) replaced RFC 7489: it removed pct, rf and ri, added np, t and psd, and finds the organizational domain by walking up DNS instead of reading the Public Suffix List.
pct=0 now reads as t=y; any other pct is dropped because receivers applied it inconsistently. The report size suffix (!10m) is ignored.
The tree walk asks _dmarc at the name and each parent, at most eight questions, so a very deep name should carry its own record. Google's and Microsoft's help pages still describe pct.
- pct=0 became t=y
- rf removed
- ri removed
- !10m removed
_dmarc.mail.news.example.comNXDOMAIN_dmarc.news.example.comNXDOMAIN_dmarc.example.comv=DMARC1 ✓first record found wins; at most 8 questionsHow do I send DMARC reports to another service?
Put the service's address in rua; when its domain isn't yours, it must publish a permission record named like example.com._report._dmarc.reports.example.net (your domain, then theirs), which report services do once for every domain with a wildcard.
Without that record receivers send the reports nowhere, and nothing tells you. The generator checks each outside address live and shows the record its owner must publish.
Use a mailbox or service built for volume: big senders get hundreds of reports a day. Failure reports (ruf) can carry message content, and Gmail and Microsoft don't send them.
example.com._report._dmarc.rua.vendor.example.netTXT "v=DMARC1;"reports@rua.vendor.example.netReport services that publish a wildcard permission
DMARC for Gmail, Yahoo and Outlook.com senders
Gmail, Yahoo and Outlook.com require bulk senders to publish DMARC, and p=none is enough; the From domain must also align with SPF or DKIM.
Gmail and Outlook.com count more than 5,000 messages a day; Yahoo names no threshold. Outlook.com wants SPF and DKIM both to pass, and refuses mail that fails with 550 5.7.515. A DMARC record for Google Workspace is the same as for any domain: start at p=none with a report address.
BIMI logos need more: quarantine or reject on the organizational and From domains, with no subdomain policy of none.
| Gmail | Yahoo | Outlook.com | |
|---|---|---|---|
| Since | February 2024 | February 2024 | May 5, 2025 |
| Who counts | over 5,000 a day | no threshold named | over 5,000 a day |
| DMARC | p=none is enough | p=none, and it must pass | p=none, aligned |
| SPF and DKIM | both | both | both must pass |
| Alignment | SPF or DKIM | relaxed is fine | SPF or DKIM |
DMARC for a domain that sends no mail
Publish DMARC p=reject, SPF v=spf1 -all and a null MX, with wildcard SPF and MX for subdomains, and no DKIM record at all: M3AAWG's 2022 set for parked domains.
With nothing allowed to send, reject can't hurt real mail, and receivers refuse forgeries at once. M3AAWG no longer advises an empty DKIM key here (its 2015 advice): publish no DKIM record at all.
Many parked domains? Point each _dmarc at one shared record with a CNAME, so a later change is made once.
example.net. 3600 IN TXT "v=spf1 -all" _dmarc.example.net. 3600 IN TXT "v=DMARC1; p=reject;" example.net. 3600 IN MX 0 . *.example.net. 3600 IN TXT "v=spf1 -all" *.example.net. 3600 IN MX 0 .
Where do I add the DMARC record?
At your DNS host, as a TXT record named _dmarc: most hosts add your domain themselves, so you type only _dmarc, never _dmarc.example.com.
Typing the full name in a host that adds the domain creates _dmarc.example.com.example.com, a record nobody reads. Pick your host in the generator to see its exact fields.
One name holds one DMARC record: replace the old one rather than adding a second, or receivers ignore both.
| DNS host | Name field | A long value |
|---|---|---|
| Cloudflare | _dmarc | one field: it splits |
| GoDaddy | _dmarc | one field: it splits |
| Namecheap | _dmarc | one field: it splits |
| Squarespace | _dmarc | not documented |
| Amazon Route 53 | _dmarc | quoted strings |
| Google Cloud DNS | _dmarc | quoted strings |
| Azure DNS | _dmarc | one field: it splits |
| DigitalOcean | _dmarc | not documented |
| Hostinger | _dmarc | not documented |
| IONOS | _dmarc | not documented |
| OVHcloud | _dmarc | not documented |
| Porkbun | _dmarc | not documented |
| cPanel | _dmarc | one field: it splits |
| Plesk | _dmarc | not documented |
| Hetzner | _dmarc | quoted strings |
| STRATO | _dmarc | not documented |
| Bluehost | _dmarc | not documented |
DMARC Record Generator FAQ
What is a DMARC record?
What should my first DMARC record be?
Why is there no pct setting?
Can DMARC reports go to Gmail or Outlook?
Do I need SPF and DKIM before DMARC?
What is the difference between rua and ruf?
Should I use strict alignment?
What do sp and np do?
How long does a DMARC record take to work?
Is the DMARC generator free, and is my domain stored?
Missing something?Suggest a feature or a new tool
Related tools
SPF Record Generator
Build a valid SPF TXT record for your email providers and servers, with a live check of the 10 DNS lookup limit
DKIM Record Generator
Create a DKIM key pair in your browser and get the selector._domainkey TXT record to publish
DMARC Checker
Check any domain's DMARC policy the way receivers read it, with reports, SPF and DKIM
SPF Record Checker
Validate SPF records and check DNS lookup count per RFC 7208
DKIM Checker
Find a domain's DKIM keys across 140 common selectors, or verify an email's signature
MX Lookup
Find mail exchange records and mail server details
Email Header Analyzer
Parse raw email headers and trace the email journey
BIMI Record Checker
Check BIMI records, SVG Tiny PS logos and VMC certificates, and which inboxes show the logo











