In May 2026 the IETF published the revised DMARC standard, long known as DMARCbis. It moves DMARC from an informational RFC to the Standards Track and splits it into three documents:
- RFC 9989 — the policy record and how receivers find and apply it. Obsoletes RFC 7489 and RFC 9091.
- RFC 9990 — aggregate (
rua) reporting. - RFC 9991 — failure (
ruf) reporting.
Most existing records keep working. A few things in them now mean something different, or nothing at all.
Removed: pct, rf and ri
pct let a domain apply its policy to a percentage of failing mail. It is gone. A record with p=quarantine; pct=10 is now read by updated receivers as plain p=quarantine: the whole of your failing mail is quarantined, not a tenth of it. rf (report format) and ri (report interval) were removed too; reports have one format and are daily.
New: t, np and psd
t=yis the replacement for staged rollouts. It asks receivers to apply the policy one level lower —rejectasquarantine,quarantineasnone— while reports are generated as normal. It corresponds to the oldpct=0;t=n, the default, topct=100.np=sets the policy for subdomains that do not exist. Spoofers like invented subdomains because nothing legitimate ever sends from them, sonp=rejectis close to free protection.psd=marks a record as belonging to a public suffix (y), an organisational domain (n), or unspecified (u, the default). Most domain owners never need it.
Changed: how the policy is found
RFC 7489 used the Public Suffix List to work out a domain's organisational domain. RFC 9989 replaces that with a DNS tree walk: query _dmarc. the domain, then its parent, and so on towards the top-level domain, at most eight queries. The first valid record found is the one that applies. For a subdomain, the parent's sp= applies if the subdomain exists, and np= if it does not.
Clarified: what policies mean
- A record with no valid
p=is treated asp=noneif it has a validrua=, and ignored otherwise. - If more than one DMARC record is published at the same name, receivers discard all of them.
- Domains that publish
p=rejectmust sign with DKIM rather than rely on SPF alone, and domains whose users post to mailing lists should not publishp=reject. - The
!10msize suffix on report addresses is obsolete and ignored.
What to change
- Remove
pct,rfandri. Ifpctwas below 100, decide whether you really want the full policy, ort=ywhile you finish testing. - Add
np=rejectif your main policy is enforcing and you do not already setsp=reject. - Check there is exactly one record at
_dmarc.your domain. - If you are at
p=reject, confirm every sender signs with DKIM.
The DMARC checker validates against RFC 9989 and flags each of these.
