Monitoring that monitors nothing
p=none with no rua. Nothing is enforced and no reports are collected, so there is never any information on which to raise the policy.
v=DMARC1; p=none
Check a DMARC record against RFC 7489: whether the policy enforces anything, whether reports are going anywhere, and whether pct is quietly letting most spoofed mail through.
Or drop a file anywhere on this panel. Nothing is uploaded: the analysis runs in this tab.
The answer appears here
Paste on the left and press Check the record. Nothing leaves this tab.
Nothing else to flag.
No formatting problems, and nothing the rules object to. Worth remembering what that covers: this reads the file you pasted, not the account or cluster it will be applied to.
No finding matches that filter.
Real input you can load into the tool above. Each one shows a different thing going wrong, because that is what the tool is for.
p=none with no rua. Nothing is enforced and no reports are collected, so there is never any information on which to raise the policy.
v=DMARC1; p=none
pct applies only to the policy and never to reporting, so three quarters of spoofed mail falls back to the weaker policy and is likely delivered.
v=DMARC1; p=reject; pct=25; rua=mailto:dmarc@example.com; sp=reject
RFC 7489 requires a URI. A bare address is a syntax error and the record can be discarded entirely, which leaves the domain with no policy.
v=DMARC1; p=quarantine; rua=dmarc@example.com
Inheritance is usually right and worth stating. A subdomain nobody watches is the easiest way to spoof a brand.
v=DMARC1; p=reject; rua=mailto:dmarc@example.com
These are the ones that fail silently. The config is accepted, nothing raises an error, and the consequence arrives later.
Monitoring mode enforces nothing. Every message that fails DMARC is delivered exactly as before, so the domain is as spoofable as it was without a record.
Instead:Read the aggregate reports until every legitimate sender aligns, then move to quarantine and then reject.
Aggregate reports are the only thing that tells you which senders would break under enforcement. Without them there is never a safe moment to raise the policy.
Instead:Add `rua=mailto:` before anything else. Reports are daily XML, so a processing service is worth having.
`pct` applies only to the policy, never to reporting. `pct=25` with `p=reject` means three quarters of spoofed mail falls back to the weaker policy and has a good chance of arriving.
Instead:Use it to roll out, then remove it. A record left at `pct=25` is not enforcing.
DMARC checks ALIGNMENT: whether the domain that passed SPF matches the From header the recipient sees. A vendor sending as you with their own return path passes SPF and fails DMARC.
Instead:Check alignment in the aggregate reports, and use DKIM signing with your own domain for vendors that cannot align SPF.
They inherit `p`, which is usually right and is worth stating. Inheritance also silently breaks any subdomain that sends mail it cannot align, and a subdomain nobody watches is the easiest way to spoof a brand.
Instead:Set `sp=reject` explicitly if no subdomain sends mail.
DMARC is where SPF and DKIM become a decision. Publishing a record is the easy half; the half that matters is moving off p=none, and most domains that publish DMARC never do.
p=none means deliver as before and send me reports. p=quarantine means treat a failure as suspicious, which in practice is the spam folder. p=reject means refuse the message at SMTP time. Only the last two stop anyone spoofing the domain, and a record sitting at none provides exactly as much protection as no record at all.
v=DMARC1; p=none; rua=mailto:dmarc@example.com monitoring
v=DMARC1; p=quarantine; pct=25; rua=mailto:... rolling out
v=DMARC1; p=reject; sp=reject; rua=mailto:... enforcing Aggregate reports are the only thing that tells you which senders would break under a policy. Publishing p=none with no rua is monitoring that monitors nothing: you get the delay of the monitoring phase and none of the information, and there is never a safe moment to move to quarantine.
pct=25 with p=reject rejects a quarter of failing mail and falls back to quarantine for the rest, so a spoofed message has a good chance of arriving. Reporting is unaffected: reports always cover everything. It is a way to move gradually, not a destination, and a record left at pct=25 for a year is not enforcing.
DMARC does not care whether SPF passed. It cares whether the domain SPF passed for aligns with the From header the recipient sees. Relaxed alignment, the default, accepts a subdomain; strict requires an exact match. A vendor sending as you with their own return path passes SPF and fails DMARC, which is the most common surprise when a policy is first enforced.
Without sp, subdomains inherit p. That is usually right, and being explicit is better: a subdomain nobody is watching is the easiest way to spoof a brand, and inheritance will also silently break any subdomain that sends mail it cannot align. If no subdomain sends mail, sp=reject says so.
It reads the record and nothing else. It performs no DNS lookups, so it cannot confirm the record is published at _dmarc.yourdomain, cannot check that the rua address accepts reports from other domains, and cannot tell you whether your senders align. Alignment is only answerable from real aggregate reports, which is exactly why rua matters more than any other tag here.