DMARC Guidelines
DMARC (Domain-based Message Authentication, Reporting & Conformance) is the policy layer that sits on top of SPF and DKIM. It tells receiving mail servers what to do when a message fails authentication, and asks them to report back on what they saw.
Think of it like a policy handed to the doorperson
DMARC is like a policy handed to a venue’s doorperson: “check ID using SPF or DKIM; if it doesn’t check out, do this — let it through, send it to a side room, or turn it away — and send me a report either way.” SPF and DKIM do the checking; DMARC decides what happens next, and asks for the paperwork.
Why it matters
Before DMARC, there was no standard way for a domain owner to tell the world “reject anything claiming to be from me that doesn’t check out.” Receivers had to guess, using ad hoc spam filtering, which is one reason email has historically been such a common channel for impersonation and phishing. DMARC gives domain owners an explicit, machine-readable way to say what should happen to failing mail, and gives them visibility into who is sending as their domain through its reporting.
How it works
A DMARC record is published in DNS at _dmarc.yourdomain.com. It names a policy (none, quarantine, or reject) and an address to receive aggregate reports. Every domain should have one — at minimum p=none with a reporting address, so you start receiving visibility into your mail flows even before enforcing anything.
DMARC policies are inherited by subdomains by default, but a subdomain that actually sends mail should still have its own explicit record for clarity, and to override the inherited policy if needed.
I need more information
The plain-language version above covers what most people need. The rest of this article is the detailed reference: exact record syntax, optional tags, and enforcement guidance.
General
- Every domain should have a DMARC record: at minimum
p=nonewith an aggregate (rua) reporting address. - A domain should only ever have one DMARC record, published at the host
_dmarc. - DMARC records are published in DNS as TXT records (or via a CNAME pointing at one).
- DMARC record syntax is case-sensitive and should be validated with tooling before publishing.
- Keep records clean: don’t include tags at their implicit/default value (for example
adkim=roraspf=rare both already the default, so stating them adds nothing).
Configuration
The minimum valid record needs a version tag and a policy tag:
v=DMARC1; p=<policy>; rua=mailto:<reporting-address>
v=DMARC1;— the version tag, required.p=none|quarantine|reject;— the policy tag, required.pct=— defaults to 100 (the policy applies to 100% of failing messages) if left out; only set it explicitly if you deliberately want a partial rollout.aspf=r|sandadkim=r|s— alignment mode for SPF and DKIM respectively (relaxed or strict); these only affect how alignment with the Header.From domain is evaluated, not whether SPF/DKIM themselves pass.ruf=— forensic report address. If it isn’t set, the relatedfo=(forensic options) tag has nothing to act on and can be left out.- Avoid
ri=(reporting interval) andrf=(reporting format) — most reporters ignore these tags, so they add clutter without effect. - Don’t set
sp=on a subdomain’s own DMARC record — that tag is for the organisational domain to describe its subdomains, not for a subdomain to set for itself. - If your
ruaorrufaddress uses a different domain than the one being protected, that other domain must publish an explicit authorisation record, so it can’t be used to redirect reports without consent:<domain-collecting-the-data>._report._dmarc.<domain-being-protected>as a TXT record with valuev=DMARC1;.
Security
- A policy of
p=noneis monitoring-only: it does not stop abuse by itself, it only gives you visibility. - Move towards enforcement once your reports show your legitimate senders are all passing:
p=quarantine(spam folder) at minimum, ideallyp=reject(blocked outright) as the end goal.
References & further reading
- RFC 7489 – Domain-based Message Authentication, Reporting, and Conformance (DMARC): datatracker.ietf.org/doc/rfc7489. Note that RFC 7489 is published as an Informational, Independent Submission rather than on the IETF Standards Track (unlike SPF’s RFC 7208 or DKIM’s RFC 6376) — that’s simply how DMARC entered the RFC series, and it doesn’t make the document any less authoritative in practice: it’s still the specification the whole industry treats as the DMARC standard.
