DMARC Explained: How to Set Up DMARC Without Breaking Email

DMARC is the record that decides whether spoofed mail using your domain gets delivered or dropped. Here's how alignment actually works, how to read the XML reports, and how to reach p=reject without killing your own campaigns.

Jul 27, 2026 10 min read 2,252 words
DMARC Explained: How to Set Up DMARC Without Breaking Email

TL;DR

  • DMARC is a DNS TXT record that tells inbox providers what to do with mail that claims to be from your domain but fails SPF and DKIM alignment: nothing (p=none), quarantine, or reject.
  • The part everyone misses is alignment. A message can pass SPF and still fail DMARC, because the domain SPF checked isn't the domain in the From: header.
  • Since February 2024, Google and Yahoo require a DMARC record on any domain sending bulk mail. p=none technically satisfies it — but it gives you zero spoofing protection.
  • Move none → quarantine → reject over 4–8 weeks, reading aggregate reports at every step. Jumping straight to p=reject is how companies silently kill their invoicing, ticketing, and newsletter mail.
  • DMARC protects your domain's reputation. It does not fix bad lists, bad copy, or bad targeting — those are separate problems with separate fixes.

What is DMARC, in plain English?#

DMARC (Domain-based Message Authentication, Reporting and Conformance) is a published instruction that says: "If a message claims to come from my domain but can't prove it, here's what I want you to do about it — and email me a report either way."

Think of it like the bouncer's instruction card at a private club. SPF is the guest list (which IP addresses may send for this domain). DKIM is the wristband (a cryptographic signature proving the message wasn't forged or altered). DMARC is the card that tells the bouncer what to do when someone shows up with no wristband and isn't on the list — wave them through, send them to a holding room, or turn them away — plus a nightly log of everyone who tried.

Technically, DMARC is defined in RFC 7489 and published as a TXT record at _dmarc.yourdomain.com. A minimal one looks like this:

v=DMARC1; p=none; rua=mailto:dmarc@yourdomain.com

That's it. Three tags: version, policy, and where to send aggregate reports. Everything else is tuning.

DMARC sits on top of SPF and DKIM — it does not replace them. If you have neither, DMARC has nothing to evaluate and every message fails. Publish an SPF record and DKIM keys first, then layer DMARC on top.

Why did DMARC suddenly become mandatory?#

Because Google and Yahoo made it a delivery requirement in February 2024, and Microsoft followed with its own bulk-sender rules for Outlook.com in 2025.

If you send more than roughly 5,000 messages a day to Gmail addresses, Google's bulk sender guidelines require SPF, DKIM, a DMARC record, one-click unsubscribe, and a spam complaint rate under 0.3%. Yahoo's rules are near-identical. Below the 5,000/day threshold the requirements are softer, but the enforcement trend is one-directional — thresholds drop, they don't rise.

Here's the uncomfortable detail: a bare p=none record satisfies the letter of those requirements while providing no protection at all. p=none means "observe and report, take no action." Plenty of domains published p=none in early 2024, ticked the compliance box, and never looked at a report again. Their domain is still fully spoofable.

Choosing between a safe DMARC policy and an enforcing one
Choosing between a safe DMARC policy and an enforcing one

How does DMARC alignment actually work?#

This is the concept that trips up most people setting DMARC up for the first time: passing SPF is not the same as passing DMARC.

DMARC only counts an SPF or DKIM pass if the domain that passed aligns with the domain in the visible From: header — the one your recipient actually sees.

Walk through a concrete failure. You send from you@yourcompany.com through a marketing platform. The platform uses its own bounce domain, bounces.platform.net, as the envelope sender. SPF checks bounces.platform.net, finds the sending IP listed there, and passes. But the From: header says yourcompany.com. Those two domains don't match, so SPF alignment fails. If DKIM isn't signing with your domain either, DMARC fails outright — and your policy decides what happens next.

DMARC passes when at least one of these holds:

  1. SPF alignment — the envelope-from domain matches the From: header domain, and SPF passes.
  2. DKIM alignment — the d= domain in the DKIM signature matches the From: header domain, and the signature validates.

Two alignment modes control the strictness:

  • Relaxed (aspf=r, adkim=r) — the default. Subdomains count as a match, so mail.yourcompany.com aligns with yourcompany.com. This is what almost everyone should use.
  • Strict (aspf=s, adkim=s) — the domains must match exactly. Useful for high-value financial or government domains, painful for everyone else because every ESP subdomain breaks.

Practical consequence: DKIM alignment is what saves you. SPF alignment breaks constantly with third-party senders, forwarders, and mailing lists. DKIM signatures survive forwarding. When you onboard a new sending tool, the single most important setup step is authenticating your own domain so its DKIM signature carries d=yourcompany.com — not the vendor's domain.

What do the DMARC tags mean?#

Tag What it does Common value Notes
v Version DMARC1 Required, must be first
p Policy for the main domain none / quarantine / reject Required, second
sp Policy for subdomains reject Inherits p if omitted
rua Aggregate report address mailto:dmarc@yourdomain.com XML, usually daily
ruf Forensic report address mailto:... Rarely honored; privacy concerns
pct % of mail the policy applies to 25, 50, 100 Your ramp dial
adkim DKIM alignment mode r (relaxed) s only for strict domains
aspf SPF alignment mode r (relaxed) Same
fo Forensic options 1 Report on any failure

A realistic mid-rollout record:

v=DMARC1; p=quarantine; pct=50; sp=reject; adkim=r; aspf=r; rua=mailto:dmarc@yourcompany.com

That says: quarantine half the failing mail from the root domain, reject all failing mail from subdomains, use relaxed alignment, and send me aggregate reports.

One warning on ruf (forensic reports): most large providers stopped sending them years ago over GDPR and privacy concerns, because forensic reports contain message content. Don't build your process around data that won't arrive.

Diagram: What do the DMARC tags mean
Diagram: What do the DMARC tags mean

What's the difference between p=none, quarantine, and reject?#

Policy What receivers do Spoofing protection Risk to your own mail When to use it
p=none Deliver normally, send reports None Zero Weeks 1–3, discovery only
p=quarantine Route failures to spam Partial Moderate — legit mail may land in spam Weeks 4–6, ramp with pct
p=reject Refuse the message at SMTP Full High if sources are unmapped The destination, once reports are clean
p=reject + sp=none Root enforced, subdomains open Partial Leaves subdomains spoofable Rarely correct — avoid

The mistake pattern is predictable. A security team reads that p=reject is "best practice," publishes it on Monday, and by Wednesday the finance team's invoicing system, the HR onboarding tool, and the support desk's notification mail have all stopped arriving — because nobody knew those systems sent as the corporate domain.

DMARC failures at p=reject are silent from the sender's side. The receiving server refuses the message; your internal tool logs a bounce nobody reads. Ramp deliberately.

Diagram: What's the difference between p=none, quarantine, and reject
Diagram: What's the difference between p=none, quarantine, and reject

How do you roll out DMARC without breaking anything?#

Six steps, roughly 4–8 weeks depending on how many sending systems you have.

  1. Inventory every sender. Marketing platform, CRM, transactional service, helpdesk, billing, HR tools, calendar invites, monitoring alerts, and the one Python script on a server nobody owns. Write them all down. This list is always longer than you expect.
  2. Fix SPF and DKIM per source. Every legitimate sender needs authentication with your domain. Check your SPF record stays under the 10-DNS-lookup limit — exceed it and SPF returns permerror, which counts as a fail. A free SPF checker makes this a 30-second job instead of a manual dig session.
  3. Publish p=none with rua. Point aggregate reports at a mailbox or a DMARC parsing service. Wait 7–14 days. You are collecting evidence, not enforcing anything.
  4. Read the reports and close the gaps. Every source in the reports either belongs to you (authenticate it) or doesn't (that's the spoofing you're stopping). Keep going until every legitimate source shows aligned pass.
  5. Move to p=quarantine with pct=25, then 50, then 100. Give each step a week. Watch reports for new failures after each bump.
  6. Move to p=reject. Set sp=reject at the same time so subdomains aren't left open. Then keep reading reports monthly — new tools get bought and new sending sources appear without anyone telling you.

Budget the calendar time. Rushing steps 3 and 4 is what causes the breakage that gets DMARC rolled back entirely.

Diagram: How do you roll out DMARC without breaking anything
Diagram: How do you roll out DMARC without breaking anything

How do you read a DMARC aggregate report?#

Aggregate reports are gzipped XML files, one per receiving provider per day. Raw, they look like this per record:

<record>
  <row>
    <source_ip>198.51.100.24</source_ip>
    <count>412</count>
    <policy_evaluated>
      <disposition>none</disposition>
      <dkim>fail</dkim>
      <spf>pass</spf>
    </policy_evaluated>
  </row>
  <identifiers>
    <header_from>yourcompany.com</header_from>
  </identifiers>
</record>

Read it as: 412 messages from that IP claimed to be from yourcompany.com, SPF aligned and passed, DKIM did not. DMARC passes overall (one aligned pass is enough), but the DKIM gap is worth fixing — because that mail will fail the moment it's forwarded.

Three things to look for:

  • A known IP failing both — a legitimate sender you haven't authenticated. Fix it before enforcing.
  • An unknown IP failing both, at volume — that's the spoofing DMARC exists to stop. Enforcement handles it; no action needed beyond enforcing.
  • A known IP with SPF pass but DKIM fail — an ESP signing with its own d= domain. Reconfigure it to sign as you.

Parsing raw XML by hand stops scaling past a handful of sources. Dedicated DMARC report platforms (dmarcian, Postmark's free analyzer, Valimail, and others) turn it into a source-by-source dashboard. dmarc.org maintains a vendor-neutral list of deployment tools if you want to compare.

Realizing DMARC alignment was always the actual problem
Realizing DMARC alignment was always the actual problem

Diagram: How do you read a DMARC aggregate report
Diagram: How do you read a DMARC aggregate report

Does DMARC actually improve your deliverability?#

Yes — but indirectly, and less than most vendors imply.

DMARC's direct benefit is that nobody else can send mail that appears to come from your domain and land in inboxes. That protects the sender reputation you've built. Without it, a spoofing campaign against your domain generates spam complaints attributed to you, and your legitimate mail suffers for someone else's abuse.

What DMARC does not do:

  • It doesn't make cold email land in the primary tab. Authentication proves identity, not relevance.
  • It doesn't offset a high bounce rate. Sending to dead addresses damages reputation regardless of a perfect DMARC record.
  • It doesn't compensate for spam complaints. A 0.5% complaint rate will sink you at p=reject just as fast as at p=none.
  • It doesn't unblock a blacklisted IP. That's a separate remediation path — check your status with a blacklist checker if inbox rates dropped suddenly.

The honest framing: DMARC is table stakes. It moves you from "provider is suspicious of you" to "provider is neutral about you." Everything past neutral is earned by list quality, sending volume discipline, and reply rates.

That last point is where most outbound teams actually lose. Perfect authentication paired with a 22% bounce rate is still a reputation problem. Bounces come from stale, scraped, or guessed addresses — which is a data problem, not a DNS one. Running your list through an email verifier before a send does more for inbox placement than any DMARC tag you can set, and the two together are what a healthy program looks like. Broader context on how the pieces fit sits in our guide to email deliverability.

What are the most common DMARC mistakes?#

  • Publishing p=reject on day one. The single most expensive mistake. Legitimate mail dies silently.
  • Ignoring subdomains. p=reject with no sp tag inherits to subdomains — good. But p=reject; sp=none leaves mail.yourcompany.com fully spoofable. Attackers check for this.
  • Exceeding the SPF 10-lookup limit. Every include: costs lookups. Eleven of them means permerror and universal SPF failure. Flatten or consolidate.
  • Multiple DMARC records on one host. Two TXT records at _dmarc means neither applies. Providers treat it as no record at all.
  • Setting up rua and never reading it. Reports with no reader are compliance theater.
  • Forgetting parked domains. Domains you own but don't send from should carry v=DMARC1; p=reject; with a null SPF (v=spf1 -all). Unused domains are the easiest spoofing targets you own.
  • Assuming DMARC covers display-name spoofing. It doesn't. "Your CEO" <attacker@gmail.com> passes DMARC perfectly — because the attacker's domain is authenticated. DMARC protects your domain, not your name. That's a user-training and inbound-filtering problem.

What should you do next?#

Publish p=none with a working rua address today — it takes ten minutes and starts the data collection you'll need for everything after. Spend two weeks reading reports and authenticating every source you find. Then ramp through quarantine to reject with pct. Re-check reports monthly forever, because your sending stack keeps changing.

And once authentication is solid, put the same rigor into the data going through it. Clean domain-verified contacts beat scraped lists on every metric that DMARC can't influence: bounce rate, complaint rate, reply rate. Tomba's Email Finder returns verified, source-cited professional addresses by name and domain, with a free tier at 25 searches a month and paid plans starting at $49/mo — see Tomba pricing for the full breakdown. Authenticate your domain properly, then send it mail worth authenticating.

Start your free trial

Ready to find emails that actually work?

Join 150,000+ professionals who stopped guessing and started sending. Free credits on signup — no credit card required.

Get the Tomba newsletter

Practical outbound tactics and product updates — once every two weeks.

Share
0 clapsEnjoyed it? Give a clap.
AU

About the author

Tomba Editorial Team

Was this helpful?

Start finding verified emails today

Join 150,000+ professionals who trust Tomba for accurate contact data. No credit card required.