What Is a DMARC Record? Email Policy Explained
· Unified DNS Team · 10 min read
What Is a DMARC Record?
A DMARC record (Domain-based Message Authentication, Reporting & Conformance) is a DNS TXT record that tells receiving mail servers what to do when email fails SPF or DKIM checks. It's the policy layer that ties SPF and DKIM together into a complete email authentication system.
The Basics
- DMARC stands for "Domain-based Message Authentication, Reporting & Conformance"
- Published as a TXT record at
_dmarc.domain.com - Specifies policy for failed authentication (none, quarantine, reject)
- Provides reporting to domain owners about authentication results
- Addresses the weakness of SPF and DKIM being separate systems
Why DMARC Matters
Without DMARC, SPF and DKIM operate independently with no coordinated policy:
- SPF checks the envelope sender, not the visible "From" header
- DKIM proves the message wasn't modified, but doesn't enforce anything
- Receiving servers make their own decisions about failures
DMARC provides:
- Unified policy — Single rule for handling authentication failures
- Domain alignment — Ensures SPF/DKIM domains match the "From" header
- Visibility — Reports show who's sending email as your domain
- Enforcement — Tell receivers to reject unauthorized email
Example DMARC Record
_dmarc.example.com. 3600 IN TXT "v=DMARC1; p=reject; rua=mailto:dmarc@example.com; ruf=mailto:dmarc-forensic@example.com"
How DMARC Works
The Authentication Flow
- Email received — Mail server receives email claiming to be from user@example.com
- SPF check — Is the sending IP authorized?
- DKIM check — Is the signature valid?
- DMARC alignment check — Do SPF/DKIM domains align with the "From" header?
- Policy lookup — What does _dmarc.example.com say to do?
- Policy applied — None, quarantine, or reject based on DMARC record
- Report generated — Results sent to addresses in rua/ruf tags
DMARC Alignment
DMARC requires alignment — the domain in SPF or DKIM must match the "From" header domain:
SPF Alignment:
- Envelope sender domain must match "From" header domain
- Relaxed: example.com matches mail.example.com
- Strict: example.com must exactly match
DKIM Alignment:
- DKIM signing domain (d=) must match "From" header domain
- Relaxed: subdomain matches parent domain
- Strict: exact match required
DMARC Pass Requires:
- SPF passes AND aligns, OR
- DKIM passes AND aligns
Example: Email From: user@example.com
| Check | Details | Result |
|---|---|---|
| **SPF** | Envelope From: mail.example.com | |
| Sending IP authorized? | Yes | |
| Aligned with example.com? | Yes (relaxed) | |
| **SPF Result** | PASS + ALIGNED | |
| **DKIM** | d=example.com | |
| Signature valid? | Yes | |
| Aligned with example.com? | Yes | |
| **DKIM Result** | PASS + ALIGNED | |
| **DMARC** | **PASS** (both SPF and DKIM aligned) |
DMARC Record Structure
Record Location
DMARC records are always at _dmarc.domain.com:
_dmarc.example.com. 3600 IN TXT "v=DMARC1; p=reject; rua=mailto:dmarc@example.com"
DMARC Tags
| Tag | Required | Description |
|---|---|---|
| **v** | Yes | Version (always DMARC1) |
| **p** | Yes | Policy for domain (none, quarantine, reject) |
| **sp** | No | Policy for subdomains |
| **rua** | No | Aggregate report destination |
| **ruf** | No | Forensic report destination |
| **adkim** | No | DKIM alignment mode (r=relaxed, s=strict) |
| **aspf** | No | SPF alignment mode (r=relaxed, s=strict) |
| **pct** | No | Percentage of messages to apply policy |
| **fo** | No | Forensic report options |
| **ri** | No | Report interval in seconds |
Complete Example
_dmarc.example.com. TXT "v=DMARC1; p=reject; sp=reject; adkim=r; aspf=r; pct=100; rua=mailto:dmarc-aggregate@example.com; ruf=mailto:dmarc-forensic@example.com; fo=1; ri=86400"
DMARC Policies Explained
p=none (Monitor Only)
_dmarc.example.com. TXT "v=DMARC1; p=none; rua=mailto:dmarc@example.com"
- Action: No enforcement, email delivered normally
- Use case: Initial deployment, monitoring
- Reports: Shows what would be affected by enforcement
p=quarantine
_dmarc.example.com. TXT "v=DMARC1; p=quarantine; rua=mailto:dmarc@example.com"
- Action: Suspicious email sent to spam/junk folder
- Use case: Intermediate step before full enforcement
- Impact: Users may miss some email
p=reject
_dmarc.example.com. TXT "v=DMARC1; p=reject; rua=mailto:dmarc@example.com"
- Action: Unauthorized email is rejected (bounced)
- Use case: Full protection, production deployment
- Impact: Spoofed email blocked completely
Gradual Enforcement with pct=
Roll out enforcement gradually:
; Start: Monitor only
_dmarc.example.com. TXT "v=DMARC1; p=none; rua=mailto:dmarc@example.com"
; Step 2: Quarantine 25% of failures
_dmarc.example.com. TXT "v=DMARC1; p=quarantine; pct=25; rua=mailto:dmarc@example.com"
; Step 3: Quarantine 50%
_dmarc.example.com. TXT "v=DMARC1; p=quarantine; pct=50; rua=mailto:dmarc@example.com"
; Step 4: Quarantine 100%
_dmarc.example.com. TXT "v=DMARC1; p=quarantine; rua=mailto:dmarc@example.com"
; Step 5: Reject 25%
_dmarc.example.com. TXT "v=DMARC1; p=reject; pct=25; rua=mailto:dmarc@example.com"
; Final: Reject 100%
_dmarc.example.com. TXT "v=DMARC1; p=reject; rua=mailto:dmarc@example.com"
Subdomain Policy (sp=)
Control subdomains separately:
; Reject for main domain, quarantine for subdomains
_dmarc.example.com. TXT "v=DMARC1; p=reject; sp=quarantine; rua=mailto:dmarc@example.com"
; Reject for all, including subdomains
_dmarc.example.com. TXT "v=DMARC1; p=reject; sp=reject; rua=mailto:dmarc@example.com"
Understanding DMARC Reports
Aggregate Reports (rua)
Daily XML reports showing:
- Who sent email as your domain
- SPF/DKIM/DMARC pass/fail rates
- Sending IP addresses
- Email volumes
_dmarc.example.com. TXT "v=DMARC1; p=reject; rua=mailto:dmarc-reports@example.com"
Example aggregate report data:
- Google sent 1,500 emails: 1,495 DMARC pass, 5 fail
- Unknown IP 198.51.100.99 sent 50 emails: 0 pass, 50 fail (potential spoofing!)
Forensic Reports (ruf)
Individual failure reports with email details:
_dmarc.example.com. TXT "v=DMARC1; p=reject; rua=mailto:dmarc@example.com; ruf=mailto:dmarc-forensic@example.com; fo=1"
fo= options:
- 0 — Generate report if all mechanisms fail (default)
- 1 — Generate report if any mechanism fails
- d — Generate report if DKIM fails
- s — Generate report if SPF fails
Note: Many providers don't send forensic reports due to privacy concerns.
Using DMARC Report Analyzers
Raw DMARC reports are XML and hard to read. Use analysis tools:
- Valimail — Free DMARC monitoring
- Dmarcian — Detailed analytics
- Postmark DMARC — Free weekly digests
- DMARC Analyzer — Comprehensive reporting
DMARC Implementation Guide
Phase 1: Assessment
- Inventory all email sources:
- Main email platform (Microsoft 365, Google Workspace)
- Marketing platforms (HubSpot, Mailchimp, etc.)
- Transactional email (SendGrid, Postmark)
- Internal applications
- Third-party services sending as your domain
- Verify SPF is configured:
dig TXT example.com | grep spf
- Verify DKIM is configured:
dig TXT selector1._domainkey.example.com
Phase 2: Monitor
Deploy DMARC in monitor mode:
_dmarc.example.com. TXT "v=DMARC1; p=none; rua=mailto:dmarc@example.com"
- Collect reports for 2-4 weeks
- Identify all legitimate email sources
- Fix SPF/DKIM for any failing sources
Phase 3: Quarantine
Start enforcement gradually:
; Start with 25% quarantine
_dmarc.example.com. TXT "v=DMARC1; p=quarantine; pct=25; rua=mailto:dmarc@example.com"
; Increase to 50% quarantine
_dmarc.example.com. TXT "v=DMARC1; p=quarantine; pct=50; rua=mailto:dmarc@example.com"
; Full quarantine
_dmarc.example.com. TXT "v=DMARC1; p=quarantine; rua=mailto:dmarc@example.com"
Monitor for legitimate email going to spam.
Phase 4: Reject
Full enforcement:
; Gradual reject
_dmarc.example.com. TXT "v=DMARC1; p=reject; pct=25; rua=mailto:dmarc@example.com"
; Full reject
_dmarc.example.com. TXT "v=DMARC1; p=reject; rua=mailto:dmarc@example.com"
Best Practices for MSPs
1. Always Start with p=none
Never deploy DMARC with enforcement immediately:
- You'll break legitimate email
- Users will complain
- You won't know what you're missing
2. Use a DMARC Report Analyzer
Raw reports are unusable. Use tools like:
- EasyDMARC (paid, MSP-friendly)
- Valimail (free tier)
- Postmark DMARC (free)
- Dmarcian (paid, detailed)
3. Fix SPF and DKIM First
DMARC is only as good as your SPF and DKIM:
- Ensure SPF includes all sending sources
- Enable DKIM on all email platforms
- Verify both pass before enabling DMARC enforcement
4. Account for Email Forwarding
Email forwarding breaks SPF (and sometimes DKIM):
- DKIM survives forwarding better than SPF
- Some forwarding breaks DKIM body hashes
- Consider relaxed alignment (default) vs strict
5. Don't Forget Subdomains
Attackers often spoof subdomains. Use sp= tag:
_dmarc.example.com. TXT "v=DMARC1; p=reject; sp=reject; rua=mailto:dmarc@example.com"
6. Monitor Continuously
DMARC isn't "set and forget":
- New email services may be added
- Configurations change
- Attackers try new techniques
7. Use Unified DNS for DMARC Monitoring
Managing DMARC across dozens of client domains requires visibility. Unified DNS provides:
- DMARC policy status for all clients at a glance
- Alerts for policy changes
- Compliance tracking dashboard
- Documentation synced to Hudu
Troubleshooting DMARC
Legitimate Email Failing DMARC
Check alignment:
- Is the envelope sender domain the same as the "From" domain?
- Is DKIM signing with the correct domain?
Common causes:
- Third-party service using their domain for envelope sender
- DKIM not configured or using wrong selector
- SPF not including the sending service
Not Receiving DMARC Reports
Verify rua address:
dig TXT _dmarc.example.com
Check:
- Correct mailto: format
- Email address can receive email
- Reports may take 24-48 hours to arrive
- Some senders don't send reports
Testing DMARC
Query DMARC record:
dig TXT _dmarc.example.com +short
Send test email:
- Send to Gmail
- View original message
- Look for "DMARC: PASS"
Online tools:
- mxtoolbox.com/dmarc.aspx
- dmarcanalyzer.com/dmarc/dmarc-record-check
Frequently Asked Questions
Do I need SPF and DKIM before DMARC?
You need at least one (SPF or DKIM) configured and passing for DMARC to work. Best practice is to have both.
What policy should I use?
- p=none — Start here for monitoring
- p=quarantine — After fixing all legitimate sources
- p=reject — Final goal for full protection
Most organizations should aim for p=reject.
How long should I stay at p=none?
2-4 weeks minimum, longer for complex organizations. You need enough report data to identify all legitimate senders.
Will DMARC break my email?
If implemented correctly with monitoring first, no. If you deploy p=reject immediately without checking reports, yes.
Do I need DMARC for subdomains?
Yes! Attackers often target subdomains. Use sp=reject to protect them.
What's the difference between DMARC and BIMI?
DMARC is authentication policy. BIMI (Brand Indicators for Message Identification) displays your logo in email clients but requires DMARC at p=quarantine or p=reject first.
Is DMARC required for compliance?
Increasingly yes:
- PCI-DSS recommends DMARC
- Many cyber insurance policies require it
- Government contractors may require it
- Google and Yahoo now require DMARC for bulk senders
Get Started with Unified DNS
DMARC is essential for email security and increasingly required for compliance. Unified DNS lets you view, modify, audit, and backup DMARC records across all your clients — with a compliance dashboard showing DMARC policy status, monitoring for configuration issues, and Hudu documentation syncing built in.
Unified DNS is live — try it free for a month with code FREETRIAL2026 at billing setup. No commitment. Or request a demo for a walkthrough.