Ruvalin

Reference guide

DMARC: the complete guide

DMARC is a DNS record published at _dmarc.your-domain.com that tells receiving servers what to do with messages claiming to come from you that pass neither SPF nor DKIM. Three policies exist: p=none observes, p=quarantine files as junk, p=reject has the message refused. Only p=reject stops impersonation.

By Tom GernezUpdated 8 min read

Key points

  • DMARC is defined by RFC 7489 and published as a plain TXT record.
  • It only works on top of SPF and DKIM: on its own it verifies nothing.
  • Its own contribution is alignment: requiring that the authenticated domain be the one the recipient sees.
  • Since February 2024 at Google and Yahoo, and May 2025 at Microsoft, a DMARC record is required above 5,000 messages a day.
  • Moving to rejection is done in stages over two to three weeks, never at once.

The problem DMARC solves

SMTP was standardised in 1982, when the handful of connected networks trusted one another. Nothing in the protocol checks a sender's identity. Typing “accounts@your-company.com” into the From field takes exactly as much technical skill as typing the subject line.

SPF arrived in 2006 to declare which servers may send for a domain, DKIM the same year to sign messages. Each left a door open: SPF checks the Envelope-From, which the recipient never sees, and DKIM checks the domain the signer declares for themselves. A fraudster could therefore pass both checks on their own domain while displaying yours.

DMARC, published in 2015 as RFC 7489, closes that door with two simple ideas: alignment, and a public instruction on what to do when a check fails.

How DMARC works

On receiving a message, a server that enforces DMARC proceeds in four steps.

  1. It reads the domain of the visible From field, the Header-From, and looks up the DMARC record published at _dmarc. followed by that domain.
  2. It evaluates SPF and DKIM separately, as it would have without DMARC.
  3. It checks alignment: is the domain that passed SPF or DKIM the same as the From domain?
  4. If neither is both valid and aligned, it applies the policy published in the record.

Reading a DMARC record

The record we publish at the end of an engagement
_dmarc.example.com.  IN  TXT
  "v=DMARC1; p=reject; rua=mailto:reports@example.com;
   adkim=s; aspf=s; pct=100"
TagWhat it says
v=DMARC1The version of the standard. Required, always this value, always first.
p=The policy: none, quarantine or reject. Required.
rua=The address receiving daily aggregate reports. Technically optional, in practice essential.
sp=A different policy for subdomains. Without it they inherit p=.
adkim=DKIM alignment strictness: r (relaxed, default) or s (strict).
aspf=SPF alignment strictness: r or s.
pct=The share of messages the policy applies to, from 1 to 100.
ruf=The address for detailed failure reports. Few providers send them, and they contain personal data.
fo=What triggers a failure report. No effect if ruf= is absent.

The defaults are permissive. A record reduced to v=DMARC1; p=reject works, but it applies relaxed alignment and sends no reports: you are blocking blind and you will never know what you blocked.

Alignment, which does all the work

A message carries two sender addresses, and this is the heart of the subject. The Envelope-From is used for transport and bounces: it is what SPF checks, and nobody sees it. The Header-From is what your client displays. Nothing requires the two to match.

Alignment requires exactly that they match. In relaxed mode (r, the default) a subdomain suffices: invoices.example.com aligns with example.com. In strict mode (s) the two domains must be identical.

It is also the commonest cause of failure on perfectly legitimate mail. An email service provider often sends with its own Envelope-From (bounces.provider.com): SPF passes, but on the wrong domain, so alignment fails. The fix is to configure a custom return path at the provider, under your own name.

The three policies

ValueEffect on an unaligned messageWhat it is for
p=noneNone. The message is delivered normally.Observing during rollout. Protects nothing.
p=quarantineFiled as junk. Delivered, but set aside.An intermediate step during the rollout.
p=rejectRefused during the SMTP conversation. Never delivered.The target. The only value that protects.

The large majority of the records we look up on small-firm domains are still at p=none. That is the gap between “we have DMARC” and “we are protected”: an alarm fitted but never wired in. Each value is covered in detail in the article on policies.

The reports, and why they change everything

Publishing a rua address makes mail servers around the world send a daily aggregate report as compressed XML. For every IP address that sent in your name it gives the message count, the SPF result, the DKIM result and the DMARC outcome.

No message content, no recipient addresses: only counters by source. That is what makes these reports straightforward under the GDPR, and completely unreadable by eye.

They serve two purposes. During rollout, they build the complete list of services legitimately sending in your name, including the invoicing tool nobody remembers signing up for. Afterwards, they show impersonation campaigns arriving, usually before a client complains.

Publishing your first record

  1. 01

    Check what is already there

    Query DNS before publishing anything. A forgotten DMARC record, or two competing records, account for a good share of the surprises.

    dig +short TXT _dmarc.example.com
  2. 02

    Prepare an address for the reports

    A dedicated mailbox on your own domain. It will receive one file per provider per day: do not put the address you read each morning here.

  3. 03

    Publish in monitoring mode

    One TXT record, under the name _dmarc, with a policy that blocks nothing yet.

    _dmarc  IN  TXT  "v=DMARC1; p=none; rua=mailto:reports@example.com"
  4. 04

    Wait, and read

    Two weeks minimum. That is what it takes to see the monthly sends go past: payroll, reminders, the quarterly newsletter.

  5. 05

    Fix SPF and DKIM before tightening

    Every legitimate sender found in the reports must be aligned before the policy changes. The full procedure is in the article on moving to rejection.

Is it required?

No law requires DMARC today. Three converging pressures make it hard to avoid all the same.

The first comes from the mailbox providers. Since February 2024, Google and Yahoo require SPF, DKIM and a DMARC policy from any sender exceeding 5,000 messages a day to their mailboxes. Microsoft followed on 5 May 2025 for Outlook.com, Hotmail and Live.

The rejected messages will be designated as: 550 5.7.515 Access denied, sending domain [SendingDomain] does not meet the required authentication level.
Microsoft, Exchange Online Protection, high-volume sender requirements announcement

The second is regulatory. The NIS2 directive, transposed in France through the so-called Resilience law, widens the number of entities under security obligations from 500 to ten to fifteen thousand on ANSSI's own figures. The ReCyF framework published on 17 March 2026 turns those obligations into concrete objectives; it is not yet binding, but it shows what the obligation will look like.

The third is contractual and quiet: cyber-insurance questionnaires and large customers' due-diligence packs now ask about the state of email authentication. An honest answer to that question is sometimes what starts the engagement.

The rest of the file

What DMARC does not do

DMARC protects one identity: your domain name, written identically. It does not block cousin domains, which the fraudster owns and configures; it does not check the display name, which can claim anything; and it validates without hesitation any message sent from a mailbox whose password has been stolen. Nor does it filter the mail you receive.

All three blind spots, with what to put against them, are covered in the article on what DMARC does not stop.

Common questions

Sources

Definitions

  • p=none, quarantine or reject: which to choose

    The three DMARC policies, what they actually do to a message, and why staying at p=none amounts to having installed nothing. With the decision rule, and what pct= and sp= really do.

  • Moving DMARC to reject without breaking your mail

    The rollout to p=reject, stage by stage, over two to three weeks. How to read the reports, align every legitimate sender, and how to tell when it is safe to tighten.

  • What DMARC does not stop

    DMARC blocks exact spoofing of your domain and nothing else. Cousin domains, misleading display names and compromised mailboxes all go straight through. What that means in practice.

Want to know what is published on your domain? The check is free, takes no sign-up, and reads only public records. Check your domain

Tom Gernez · Independent information security consultant. Ruvalin sets up email authentication for small French firms and professional practices.

All guides

CallBook