DMARC record
Learn what a DMARC record is, how it ties together SPF and DKIM to block email spoofing, how to read DMARC policy tags, how to safely roll out p=reject, and how to use aggregate reports to monitor your email authentication.
TL;DR
DMARC (Domain-based Message Authentication, Reporting, and Conformance) is a DNS TXT record that tells receiving mail servers what to do when an email fails SPF and DKIM authentication.
It also enables reporting — you get daily digests showing who is sending email that claims to be from your domain, whether legitimate or fraudulent.
DMARC is the final piece of the email authentication stack, on top of SPF and DKIM.
_dmarc.yourdomain.com.user@yourdomain.com.From: header?none, quarantine, or reject.rua address summarizing authentication results.Alignment is what makes DMARC powerful. SPF and DKIM can pass on a forged email if the forger uses their own domain for the envelope. DMARC requires the authenticated domain to match the visible
From:header — the one users actually see.
DMARC records are always published at:
_dmarc.{yourdomain.com}For example:
_dmarc.example.com. TXT "v=DMARC1; p=none; rua=mailto:dmarc@example.com"_dmarc.example.com. TXT "v=DMARC1; p=none; rua=mailto:reports@example.com"| Tag | Required | Values | Description |
|---|---|---|---|
v=DMARC1 | Yes | — | Version — always DMARC1 |
p= | Yes | none, quarantine, reject | Policy for the root domain |
sp= | No | none, quarantine, reject | Policy for subdomains (inherits p if omitted) |
pct= | No | 0–100 | Percentage of failing mail to apply policy to (default: 100) |
rua= | No | mailto:addr | Where to send aggregate (daily summary) reports |
ruf= | No | mailto:addr | Where to send forensic (per-message failure) reports |
adkim= | No | r, s | DKIM alignment mode — r relaxed (default), s strict |
aspf= | No | r, s | SPF alignment mode — r relaxed (default), s strict |
fo= | No | 0, 1, d, s | Forensic report options |
rf= | No | afrf | Report format (default: afrf) |
ri= | No | seconds | Reporting interval (default: 86400 = 24 hours) |
p=none — Monitor mode_dmarc.example.com. TXT "v=DMARC1; p=none; rua=mailto:dmarc@example.com"No action is taken on failing emails — they're delivered normally. Reports are still sent. Use this to audit your email sources before enforcing anything. Start here.
p=quarantine — Soft enforcement_dmarc.example.com. TXT "v=DMARC1; p=quarantine; pct=100; rua=mailto:dmarc@example.com"Failing emails are moved to the spam/junk folder. Use this once your aggregate reports show only legitimate sources are sending on your behalf.
p=reject — Full enforcement_dmarc.example.com. TXT "v=DMARC1; p=reject; rua=mailto:dmarc@example.com"Failing emails are rejected outright — they never reach the inbox. This is the goal. Fully blocks spoofing of your domain. Only move here after confirming all legitimate senders pass authentication.
DMARC enforcement should be gradual. Jumping straight to p=reject risks blocking legitimate mail if your SPF or DKIM setup has gaps.
Week 1–2: Deploy with p=none
_dmarc.example.com. TXT "v=DMARC1; p=none; rua=mailto:dmarc@example.com"Collect reports. Identify all sources sending on your behalf.
Week 3–4: Fix authentication gaps
Ensure every legitimate sender has SPF include: entries and DKIM configured. Check aggregate reports for failures.
Week 5–6: Move to p=quarantine at low pct
_dmarc.example.com. TXT "v=DMARC1; p=quarantine; pct=10; rua=mailto:dmarc@example.com"Ramp pct up over time as you gain confidence.
Final: Full p=reject
_dmarc.example.com. TXT "v=DMARC1; p=reject; rua=mailto:dmarc@example.com"Relaxed alignment (default, adkim=r / aspf=r): The organizational domain must match. mail.example.com aligns with example.com.
Strict alignment (adkim=s / aspf=s): The domains must match exactly. mail.example.com does not align with example.com under strict mode.
Most domains should use relaxed alignment (the default). Strict is only needed in high-security environments.
When you set rua=, you receive daily XML reports from every major mail provider. Each report shows:
These reports are invaluable for discovering:
Use a DMARC report analyzer (many are free) to parse the XML into readable summaries.
dig _dmarc.example.com TXTnslookup -type=TXT _dmarc.example.comBy default, subdomains inherit the root domain's policy. To override:
_dmarc.example.com. TXT "v=DMARC1; p=reject; sp=none; rua=mailto:dmarc@example.com"Here p=reject applies to example.com, but sp=none applies to sub.example.com — useful when subdomains have less-controlled email sending.
| Feature | SPF | DKIM | DMARC |
|---|---|---|---|
| What it authenticates | Sending server IP | Message cryptographic signature | From: header alignment |
| Required for DMARC | Yes (one of the two) | Yes (one of the two) | — |
| Survives forwarding | No | Yes | Depends on DKIM |
| Provides reporting | No | No | Yes |
| Stops spoofing | Partially | Partially | Yes (p=reject) |
DMARC requires at least one of SPF or DKIM to pass with alignment. If both fail alignment, the policy applies regardless.
→ See also: SPF Record, DKIM Record, TXT Record
Related: SPF Record · DKIM Record · MX Record · TXT Record