Skip to content

DMARC Record Generator

A DMARC record generator builds the TXT record you publish at _dmarc.yourdomain.com. Choose the policy receivers should apply to mail that fails authentication, where aggregate reports go, and how strictly domains must align — then publish the result and watch the reports before you enforce.

Policy for your domain (p)

Without sp, subdomains inherit p. Set it only when a subdomain needs a weaker policy during migration — attackers spoof subdomains too.

Daily XML summaries of every source sending as your domain. This is the whole point of starting at p=none — without it you are enforcing blind.

Per-message copies of failures. Nearly all large receivers stopped sending these for privacy reasons, so expect little or nothing — and never point it at a mailbox that cannot handle message content.

Full enforcement — the tag is omitted because 100 is the RFC default.

DKIM alignment (adkim)
SPF alignment (aspf)
Your DMARC record
v=DMARC1; p=none
No rua address is set. The record is still valid, but you will never see who is sending as your domain — which makes moving past p=none guesswork.
Publish this at _dmarc.yourdomain.com as a TXT record
  1. Record type: TXT.
  2. Name/host: _dmarc — most panels append the domain for you, so typing the full _dmarc.yourdomain.com can create _dmarc.yourdomain.com.yourdomain.com.
  3. Value: the record above, exactly as shown, on one line.
  4. Publish only one DMARC record. Two records at _dmarc make receivers ignore DMARC for the domain entirely.
  5. Verify with the DMARC checker once the TTL has passed.
Recommended staged rollout
  1. Weeks 1–4: p=none with rua. Read the aggregate reports and fix every legitimate stream that is failing SPF or DKIM alignment.
  2. Weeks 5–8: p=quarantine, ramping pct from 25 to 100. Watch for help-desk reports of missing mail.
  3. Week 9 onward: p=reject with no pct tag. Keep reading reports — new SaaS tools get added to companies constantly.

The anatomy of the record you are building

A DMARC record is a semicolon-separated tag list in a single TXT record on the _dmarc label. Only two tags are required — v and p — and every other tag has a defined default, so a minimal valid record is short:

# Minimal, and almost useless: no reports come back
v=DMARC1; p=none

# The record you should actually start with
v=DMARC1; p=none; rua=mailto:[email protected]

# The record you should end up with
v=DMARC1; p=reject; rua=mailto:[email protected]
Published as TXT on the host _dmarc — never on the bare domain.
TagDefault when absentWhat it does
v=DMARC1Required, must be firstIdentifies the record. Anything else and receivers discard it.
p=Requirednone, quarantine, or reject — the policy for the domain itself.
rua=None sentAddress for daily aggregate XML reports. Effectively mandatory in practice.
ruf=None sentPer-message failure reports. Largely obsolete; most receivers never send them.
sp=Inherits pA different policy for subdomains.
pct=100Percentage of failing mail the policy applies to.
adkim=r (relaxed)How closely the DKIM d= domain must match From:.
aspf=r (relaxed)How closely the MAIL FROM domain must match From:.
fo=0Which failures generate a forensic report. Only meaningful with ruf.
ri=86400Requested aggregate report interval in seconds. Receivers rarely honour anything but daily.

The generator omits tags that match their default, which is deliberate. A record carrying pct=100; adkim=r; aspf=r says exactly the same thing as one without them, and shorter records are easier to audit at a glance six months from now.

Alignment: leave it relaxed unless you are sure

DMARC passes when SPF or DKIM passes and the authenticated domain aligns with the From: header domain. Relaxed alignment (r) accepts any name sharing the same organisational domain, so a From: of example.com aligns with a DKIM d=mail.example.com or a bounce address at bounces.example.com. Strict alignment (s) requires an exact, label-for-label match.

Read the full explanation of dmarc record generator results ↓
Strict alignment is the fastest way to break working mail. Amazon SES, SendGrid, Mailgun and Microsoft 365 commonly sign with or bounce from a subdomain — aligned under relaxed, failing under strict. Choose strict only when every sending path is yours and you have verified each one in aggregate reports first.

A staged rollout that will not eat your mail

The mistake that generates support tickets is publishing p=reject on day one. You do not yet know every system that sends as your domain — the invoicing tool, the monitoring alerts, the recruitment platform, the application relay someone set up in 2019. Enforce before you enumerate and those streams stop dead, silently, at every receiver that honours DMARC.

  1. Weeks 1–4 — `p=none` with `rua`. Publish v=DMARC1; p=none; rua=mailto:[email protected]. Nothing changes for your mail. Aggregate reports start arriving daily as gzipped XML from each large receiver. Build the list of every source sending as your domain.
  2. Fix alignment for each legitimate source. For third parties this almost always means completing their branded/custom DKIM setup so they sign with d=example.com instead of their own domain. Confirm each one with the DKIM checker, and confirm your SPF record is still inside the ten-lookup limit.
  3. Weeks 5–8 — `p=quarantine`, ramping `pct`. Start at pct=25, move to 50, then 100 over a few weeks. Failing mail goes to spam rather than being lost, so mistakes are recoverable and users report them.
  4. Week 9 onward — `p=reject`, no `pct`. Full enforcement. Keep the rua tag and keep reading reports: new SaaS tools get bought every quarter and each one is a fresh chance to break alignment.

Raw aggregate XML is readable but tedious at volume. Point rua at a mailbox you will actually check, or at a DMARC reporting service — either way, the tag has to be there. A domain sitting at p=none with no rua has all of the paperwork and none of the benefit.

Publishing it without the classic mistakes

  1. Record type TXT. There is no "DMARC" record type.
  2. Host/name: _dmarc. Most panels append the zone automatically — typing _dmarc.example.com in a panel that appends will create _dmarc.example.com.example.com, which resolves to nothing.
  3. Value: the whole tag string on one line. Do not split it across records.
  4. Exactly one DMARC record. Two at _dmarc and receivers ignore DMARC for the domain completely — worse than publishing nothing.
  5. If rua points at a different organisational domain, that domain must publish example.com._report._dmarc.reporter.com with v=DMARC1, or receivers will not send your reports there (RFC 7489 §7.1).
  6. Verify with the DMARC checker after the TTL expires, and with a raw TXT lookup if the checker disagrees with your panel.

Why this is no longer optional

Since February 2024, Google and Yahoo require any sender delivering 5,000 or more messages a day to their users to publish SPF, DKIM and a DMARC record of at least p=none, with the From: domain aligned to one of the two. Microsoft applied the same requirement to Outlook.com, Hotmail and Live from May 2025, initially filtering non-compliant mail to Junk. Below those volumes Gmail still expects at least SPF or DKIM on every message. A missing DMARC record is now a deliverability problem in its own right, not just a security gap.

Verify from the command line

# Read back exactly what you published
dig +short TXT _dmarc.example.com

# Catch the double-record mistake
dig +short TXT _dmarc.example.com | grep -c DMARC1

# Check what policy a subdomain will actually get
dig +short TXT _dmarc.mail.example.com

# Ask the authoritative nameserver, ignoring every cache
dig @$(dig +short NS example.com | head -1) TXT _dmarc.example.com +noall +answer
A count of anything other than 1 means the record needs attention.

The record for a domain that never sends mail

Parked domains, brand-defence registrations and web-only domains are prime spoofing targets precisely because nobody monitors them. Publish v=DMARC1; p=reject; at _dmarc and v=spf1 -all on the bare domain. There is no rollout period to observe — no legitimate mail exists to break — so enforce immediately. Build the SPF half with the SPF generator.

DMARC Checker
Policy, alignment, and why Gmail may reject you

Frequently asked questions

Where do I publish the DMARC record?
As a TXT record on the host _dmarc, so the full name is _dmarc.example.com. Not on the bare domain, and not on dmarc without the underscore. Most DNS panels append the zone for you, so enter just _dmarc in the name field.
What should my first DMARC record be?
v=DMARC1; p=none; rua=mailto:[email protected]. It changes nothing about how your mail is handled, satisfies the Google, Yahoo and Microsoft bulk-sender requirement, and starts the aggregate reports you need before you can safely enforce anything.
Do I need a ruf address?
No. Forensic reports contain message content, so nearly every large receiver stopped sending them for privacy reasons — you will get little or nothing. Publish rua and leave ruf out unless a specific tool requires it, and never point it at a mailbox that cannot handle recipient data.
Should I set sp= for my subdomains?
Usually not. Without sp, subdomains inherit p, which is what you want — attackers spoof billing.example.com just as happily as the root domain. Set sp= only when a specific subdomain needs a weaker policy during a migration, and remove it when the migration ends.
What does pct= do during the rollout?
It applies your policy to that share of failing messages and downgrades the rest to the next weaker policy: pct=25 with p=quarantine sends a quarter of failures to spam and delivers the other three quarters normally. It is a ramp for the quarantine phase. Drop the tag once you reach reject.
How long before I can move to p=reject?
Typically eight to twelve weeks, but the schedule is not the criterion — the reports are. Move when your aggregate reports show every legitimate source passing aligned SPF or DKIM, and no unexplained sources left. A domain with three senders may be ready in a fortnight; a large organisation may take six months.
Can I publish DMARC before SPF and DKIM are working?
You can publish p=none — it enforces nothing and the reports will show you exactly what is broken, which is genuinely useful. Do not publish quarantine or reject before both SPF and DKIM are in place and aligned; you would be asking receivers to discard your own mail.