DMARC record tags explained: policy, reports, alignment and test mode

By TechCompare · Updated · How we check

Start with v=DMARC1, set p to none, quarantine or reject, and add rua to get reports. RFC 9989 retired pct in May 2026, so test a stricter policy with t=y instead.

A DMARC record is a TXT record at _dmarc.example.com, written as tag=value pairs split by semicolons. It has to start with v=DMARC1, or receivers ignore the whole record. Most domains only need two more tags: p for the policy and rua for reports. Every other tag has a default that suits most senders.

Topic
DMARC record tags
DMARC
Category
Email records
SPF, DKIM and DMARC

How this is calculated

Three tags set the policy for mail that fails DMARC:

  • p covers the domain itself. none only asks for reports, quarantine asks receivers to treat failing mail as suspicious (usually the spam folder), and reject asks them to turn it away. A record without p counts as p=none.
  • sp covers subdomains that exist, like news.example.com. Without it, they get the p policy. It only works on the main domain's record, and receivers ignore it on a subdomain's own record.
  • np covers subdomains that don't exist at all, the made up names forged mail likes to use. Without it, they get sp, or p when sp is missing too.

adkim and aspf set alignment: how closely the domain that passed DKIM or SPF has to match the From address. The default, r for relaxed, accepts any name under the same main domain, so mail.example.com lines up with example.com. s for strict needs an exact match.

rua lists where receivers should send aggregate reports, as mailto: addresses split by commas. Without it, receivers send none. ruf asks for failure reports about single messages, and fo picks which failures trigger them: 0 (the default) when every check fails, 1 when any check fails, d for a DKIM failure and s for an SPF failure. A report address on another domain only works if that domain agrees, with a record at a name like example.com._report._dmarc.reports.example.net.

RFC 9989 replaced the original DMARC spec, RFC 7489, in May 2026 and cleaned up the tags. pct used to apply the policy to only part of the failing mail, but receivers rarely got values other than 0 and 100 right. Its job went to t. With t=y, a receiver applies the policy one step softer, so reject acts like quarantine and quarantine acts like none. It does nothing for p=none and doesn't change the reports. rf and ri, the report format and interval, are retired too, and receivers that follow RFC 9989 ignore all three.

psd is for registries that run public suffixes like .com or .co.uk, so leave it out on a normal domain. It matters because receivers now find the policy for a subdomain by walking up its name in DNS, instead of checking a public list of suffixes.

Keep one DMARC record per name. A receiver that finds two throws both out and looks for a record higher up.

The DNS Lookup shows a domain's DMARC record, explains each tag in a dropdown, fills in the defaults it leaves out, and flags retired tags.

Verdict

Publish v=DMARC1 with p=none and a rua address, then read the reports until every real sender passes. Move to quarantine and later to reject. To try reject first, set p=reject with t=y and receivers apply quarantine until you drop the t tag. Add np=reject early, since no real mail comes from names that don't exist.

More DNS scenarios

TXT records
The free text record that holds verification codes, SPF, DKIM keys and DMARC policies.
View details
SPF vs DKIM vs DMARC
SPF checks the sending server, DKIM checks the message, and DMARC ties both to the From address.
View details
MX records
How senders find your mail servers, what the priority number does, and the null MX for domains that take no mail.
View details

Frequently asked questions

What does pct do in DMARC now?
Nothing, for receivers that follow RFC 9989. The tag is retired. It used to apply the policy to a share of failing mail. Use t=y to test a policy one level softer, and delete pct the next time you edit the record. Receivers still on RFC 7489 may read it for a while.
What's the difference between sp and np?
sp sets the policy for subdomains that exist in DNS, like mail.example.com. np sets it for names that don't exist at all, which only show up in forged mail. If np is missing, receivers use sp, and if both are missing, p.
Does a DMARC record need rua?
It works without one, but then no receiver sends you aggregate reports, so you can't see who sends mail as your domain or what fails. Add at least one mailto: address before you move past p=none.