Start with observation
The initial value is v=DMARC1; p=none. This requests no special handling of failing mail. Add a rua mailbox you control if you want aggregate evidence; an empty rua is allowed but no reports are requested.
Email Dev Tools
Choose a policy or paste one TXT value. Review the tag meanings and delivery risks before changing DNS.
TXT host Add a domain to show the host
v=DMARC1; p=none
Processed in this browser; no DNS query or update is sent.
Record ready. Review warnings before publishing.
A DMARC record generator is useful when a new sending domain needs a safe first policy or an inherited subdomain rule is unclear. A single character in a report URI can stop the feedback you expected, while an early reject policy can affect real mail.
This workbench shows the TXT value and its effective policy side by side. The DMARC record generator builds according to RFC 9989 and can read older records without silently deleting their historical tags. It checks local syntax; publishing and live mail authentication remain separate steps.
See the current policy and the intent of an older record in one place.
Many web forms still add pct, rf or ri. This DMARC record generator leaves those removed tags out of new values, starts at p=none, and shows when a separate sp or np rule would override inherited policy. It does not claim that test mode is a precise rollout percentage.
Paste a TXT value to see each tag, the resulting domain and subdomain policies, and warnings for report destinations. Historical pct, rf and ri remain visible with a version warning; no automatic migration changes the original record or its intent.
The initial value is v=DMARC1; p=none. This requests no special handling of failing mail. Add a rua mailbox you control if you want aggregate evidence; an empty rua is allowed but no reports are requested.
Leaving sp and np at Inherit omits both tags. Strict alignment requires exact domain matches, while relaxed is the default. Multiple rua or ruf mailboxes are comma separated; an address outside your domain requires authorization in the destination DNS.
Automatic processing waits 350 ms and disables export as soon as an option changes; turn it off for the button or Ctrl/Cmd + Enter. After copying the TXT value, publish one record at _dmarc and check real SPF/DKIM alignment and reports before enforcing rejection.
Select none, quarantine or reject for p. Leave sp and np inherited unless a different subdomain policy is deliberate. The result lists the effective policy for the domain, existing subdomains and nonexistent subdomains, even when their optional tags are omitted.
Enter one or more comma separated email addresses for rua or ruf. The builder adds mailto: to bare addresses and rejects malformed recipients; the parser accepts other syntactically valid URI schemes but cannot promise receiver support. The fo condition is emitted only when ruf is present.
The parser catches duplicate tags, malformed separators, unsupported values and misplaced required tags with a character position. It preserves unknown tags rather than treating them as fatal, and identifies pct, rf and ri as old RFC 7489 fields instead of silently rewriting them.
Begin with v=DMARC1; p=none and add rua=mailto:reports@yourdomain when that mailbox exists. The DMARC record generator shows a bare p=none first, so you can choose a real report destination rather than publish a placeholder.
p=none asks receivers to observe. quarantine asks them to treat failures as suspicious, often by placing mail in spam. reject asks them to refuse failing messages. Review legitimate senders and alignment in reports before strengthening either policy.
Publish the generated value as a TXT record at _dmarc.yourdomain.com, or enter _dmarc when the DNS provider appends the zone. This page does not publish it. Verify that only one applicable DMARC policy record is live.
rua destinations receive aggregate reports about authentication results. ruf requests per-message failure reports, which can contain sensitive details and may not be sent by many receivers. This builder keeps ruf empty by default and omits fo without it.
RFC 9989 removed pct, rf and ri from current policy records. An older pct value is still parsed and reported as historical, not presented as a reliable percentage guarantee. Rebuild a current policy deliberately rather than assuming t=y equals the old percentage.
Still have a DMARC policy question?
Use the DMARC record generator to inspect a policy, then confirm its live DNS record and authentication reports before changing enforcement.