How do you read a DMARC check result (p, pct, rua, ruf, alignment)?
A DMARC check result reports what your domain's _dmarc TXT record actually says, tag by tag: p is the headline policy (none, quarantine or reject) applied to mail that fails SPF or DKIM alignment, sp optionally sets a different policy for subdomains, pct controls what fraction of failing mail that policy applies to, rua and ruf are reporting addresses, and adkim/aspf choose how strictly the visible From: domain must match the domain that passed authentication.
By AdminKit team, Netbase JSC · Updated October 29, 2026
A DMARC result is a set of tags, not one verdict
AdminKit’s DMARC check fetches the TXT record published at _dmarc.<yourdomain> and parses each tag RFC 7489 defines, explaining what each one currently tells receivers to do. There’s no single pass/fail reading of a DMARC record the way there is for one authenticated message — the record is a policy statement, and reading it means understanding what each tag contributes, together, to how receivers will treat mail that fails SPF or DKIM alignment for your domain.
p: the headline policy
The p tag is the core of the record: none asks receivers to take no action beyond reporting, quarantine asks them to treat failing mail as suspicious (typically routed to spam), and reject asks them to refuse it outright. RFC 7489 §6.3 is explicit that p=none carries no enforcement effect at all — a domain that has only ever published p=none is not protected from spoofing in any practical sense, even though a DMARC record technically exists. Reading a result with p=quarantine or p=reject is the signal that enforcement is actually happening.
sp: a separate policy for subdomains
sp lets a domain apply a different policy to subdomains than to the domain itself. If absent, subdomains inherit whatever p specifies. This is useful in a specific, common situation: an organization’s main domain sends business-critical mail and needs a cautious, staged rollout to p=reject, while its many unused or rarely-used subdomains have essentially no legitimate mail traffic to break — publishing sp=reject locks down a large source of spoofing risk (mail spoofed from random subdomains) well before the main domain’s policy catches up.
pct: how much of the failing mail is actually affected
pct applies the current policy to only a percentage of mail that fails alignment, with the remainder falling back to the next-weaker treatment. A result showing p=reject; pct=25 means only a quarter of failing mail is actually rejected right now — the rest is treated more leniently. This exists specifically to let a domain test a stricter policy’s real-world impact on a fraction of traffic before committing fully, and reading pct alongside p is necessary to know how much enforcement is genuinely in effect; p=reject with a low pct is a much softer real-world setting than the policy name alone suggests.
rua and ruf: where reports go
rua is the address (usually a mailto: URI) that receives daily aggregate reports — XML summaries of pass/fail volume by sending source — and is the practical foundation for knowing whether a stricter policy is safe to adopt. ruf is a separate, optional address for forensic (per-message) reports; RFC 7489 §6.3 defines the two independently, and most large mailbox providers support rua far more widely than ruf, due to the privacy sensitivity of sharing message-level detail. A result with a policy but no rua address means the domain has enforcement without the visibility needed to safely tune it — worth fixing even on an already-enforced domain.
adkim and aspf: how strict the alignment check is
Alignment is the check that the domain actually validated by SPF or DKIM matches the domain shown in the message’s visible From: address — without it, an attacker could pass SPF for their own unrelated domain while spoofing yours in From:. RFC 7489 §3.1 defines alignment as relaxed by default: mail.example.com aligns with example.com. Setting adkim=s or aspf=s requires an exact domain match instead, with no subdomain exception — a deliberate tightening some organizations apply to their primary sending domain once they’ve confirmed every legitimate subdomain sender authenticates under the exact domain rather than a variant.
Putting a result together
A fully read DMARC result answers three questions at once: what happens to failing mail right now (p, sp, pct), who finds out about failures (rua, ruf), and how strict the match has to be to count as a pass (adkim, aspf). Run AdminKit’s DMARC check against your own domain to see all of these read together in plain language, and see SPF, DKIM and DMARC explained for how the record fits with SPF and DKIM. If your record already has a monitored rua address and you’re ready to move past p=none, reading DMARC aggregate reports and rolling out to p=reject safely covers the staged path from monitoring to full enforcement.
This guide is general information, not a security audit of your specific network — see our disclaimer for what AdminKit's guidance does and does not commit to.
Frequently asked questions
My check shows p=none — is my domain protected from spoofing?
No. RFC 7489 §6.3 defines p=none as asking receivers to take "no specific action" on mail that fails — it only requests reporting, not enforcement. A domain at p=none is still exactly as spoofable as one with no DMARC record at all; the only thing p=none adds is visibility into failures through rua reports, which is meant as step one before moving to a stricter policy, not the end state.
What's the difference between p and sp in the result?
p sets the policy for the domain itself (mail claiming to be from example.com). sp optionally sets a separate policy specifically for subdomains (mail from mail.example.com or any other subdomain) — if sp is absent, subdomains inherit the p value. This matters because many domains send little or no mail directly from subdomains, making sp=reject a comparatively low-risk way to lock down subdomain spoofing even before the main domain reaches p=reject.
The result shows pct=50 under p=reject — what does that actually do?
It applies the reject policy to only 50% of mail that fails alignment, selected at random by the receiver, while the remaining 50% is treated as if the next-weaker policy applied. This is a deliberate gradual-rollout mechanism, not a bug — a domain raises pct toward 100 over time as it confirms the stricter policy isn't catching legitimate mail, rather than flipping the whole domain to full enforcement at once.
What does strict versus relaxed alignment (adkim/aspf) mean in the result?
Relaxed alignment (the default, adkim=r or aspf=r) accepts a match between the visible From: domain and the authenticating domain if one is a subdomain of the other — mail.example.com aligns with example.com. Strict alignment (adkim=s or aspf=s) requires an exact match with no subdomain exception. Most domains use the relaxed default; strict alignment is a deliberate tightening some organizations choose for their primary domain.
The check shows no DMARC record at all — what happens to spoofed mail then?
With no DMARC record, receivers have no explicit instruction from the domain owner about what to do with mail that fails SPF or DKIM alignment, and no reporting address to flag failures to — each receiver falls back to its own independent spam-filtering judgment, which varies and isn't something the domain owner can see or influence. Publishing even a p=none record with a monitored rua address is a meaningful first step, since it costs nothing in mail delivery and starts the reporting feedback loop RFC 7489 is built around.
Want AdminKit to watch this for you?
Free checks tell you the state today. Protective DNS and monitoring tell you when it changes.
Talk to an expert
Huy Nguyen (David), Founder & CEO, Netbase JSC
Ask whether this fix applies to your setup, or get a second pair of eyes on your DNS and mail records.