Blog · Dmarc
How Many Domains Actually Enforce DMARC (vs. Just Publish It)
The short answer: most domains that have a DMARC record do not enforce it.
Published estimates consistently point in the same direction. Roughly 70-80% of domains that publish a DMARC record use p=none as their policy. They are monitoring, not protecting. A p=none record tells receiving servers to do nothing with mail that fails DMARC. It collects reports. It does not block anything.
The number that puts this in context: roughly 20% of mail-sending domains have published any DMARC record at all. Combine that with the 70-80% sitting at p=none, and you are looking at a world where only about 4-6% of mail domains have any real DMARC protection.
These figures come from multiple measurement passes over the years. Organizations like the Cyberood Centre and various email security researchers have published datasets. The numbers shift slightly depending on methodology, but the direction is always the same: most domains that touch DMARC stop at the first step.
The difference between publishing DMARC and enforcing it
DMARC has three policy values.
p=none tells receivers: collect reports about this domain, but take no action on mail that fails. This is a monitoring setting.
p=quarantine tells receivers: treat mail that fails DMARC as suspicious, usually by sending it to spam.
p=reject tells receivers: do not accept mail that fails DMARC at all.
The difference between p=none and p=reject is not a spectrum. It is a binary choice between visibility and protection. A domain at p=none has a DMARC record. It is not protected by DMARC.
This catches a lot of people off guard. They see a DMARC record in their DNS, they assume the domain is secured. It is not. The record exists. The protection does not.
What the data shows
Here is the pattern across multiple measurement studies.
Out of all domains that send email, roughly one in five has published a DMARC record. This alone is worth noting: despite years of promotion, DMARC adoption among mail senders is still below 25%.
Of those domains with a DMARC record, the majority use p=none. Only a subset use p=quarantine or p=reject. The exact split varies by study, but the consistent finding is that p=none dominates.
The practical implication: when you receive an email that appears to come from a major brand and it passes DMARC, there is a meaningful chance that domain is running p=none. The record exists. The protection does not.
This is not a theoretical concern. Impersonation emails that spoof domains with p=none policies arrive in inboxes because receiving servers are instructed to do nothing with the failed DMARC result.
Why so many domains stop at p=none
The reason is fear of breaking legitimate email.
Moving from p=none to p=reject means receiving servers will refuse mail that fails DMARC authentication. If your legitimate sending sources are not properly aligned, that includes mail you actually want to receive.
The path from p=none to p=reject requires work in between. You need to monitor aggregate reports, identify all legitimate sending sources, fix alignment issues, and only then tighten the policy. Many organizations start this process and stop partway through. They leave the domain at p=none indefinitely because the migration feels risky or the monitoring work was never completed.
Another factor: many domains adopted DMARC to satisfy a compliance requirement, not because they understood what DMARC actually does. The record gets published to check a box. The policy stays at p=none because no one is actively maintaining the configuration.
How to tell if your domain is actually protected
Run a DNS query on your DMARC record.
dig +short TXT _dmarc.yourdomain.com
Look for the p= value.
If it is p=none, your domain is in monitoring mode. It is not protected.
If it is p=quarantine or p=reject, your domain has an active enforcement policy. That is a meaningful security control, but only if alignment is correctly configured for all legitimate sending sources.
The deeper check requires aggregate reports. The DMARC record contains an RUA address where receiving servers send XML aggregate reports. These reports tell you which sources are sending mail on behalf of your domain, which ones are failing, and why. Without reading these reports, you cannot know whether your enforcement policy is working correctly or silently rejecting legitimate mail.
DMARC aggregate reports arrive in raw XML. Parsing them by hand for a domain with multiple sending sources is tedious and error-prone. Most organizations that try to do this manually give up within a few weeks and stay at p=none. Tools that turn those XML reports into readable dashboards make the monitoring step practical enough to actually complete. DMARCFlow is built for exactly this: parsing aggregate reports and showing you which sources are aligned and which are not, so you can move to enforcement with confidence instead of guesswork.
What to do if your domain is not enforcing
The sequence is the same for every organization that wants to move from p=none to actual protection.
First, set up aggregate report monitoring. You need a tool that can parse DMARC XML reports and turn them into something readable. This is the step most organizations skip, and it is the reason the migration stalls.
Second, review the report data for all legitimate sending sources. Your marketing platform, your CRM, your internal mail servers, your cloud providers. Each one needs a correct DKIM signature and an aligned SPF record. If a source is failing alignment, fix it before tightening the policy.
Third, move to p=quarantine first. This is a safer intermediate step. Mail that fails DMARC goes to spam instead of being refused outright. It gives you a chance to catch any legitimate sources you missed.
Fourth, after a quiet period at p=quarantine, move to p=reject. At this point your domain has active impersonation protection. Any mail that does not come from an aligned, authenticated source will be refused.
The entire process can take weeks or months depending on how many sending sources you have. The domains that skip straight to p=reject without monitoring first are the ones that end up calling their IT team at 9pm because a vendor they forgot about stopped receiving mail.
The numbers behind the gap
Here is what the published measurements consistently show.
- Approximately 20% of mail-sending domains have published any DMARC record
- Of those, roughly 70-80% use p=none
- That means only 4-6% of mail domains have any meaningful DMARC enforcement policy
- The remainder are at p=quarantine or p=reject, which provides actual protection
The disparity between publishing and enforcing is not a new finding. It has been documented across multiple measurement studies over the past several years. The gap persists because the migration from p=none to enforcement requires operational work, and that work is easy to defer.
FAQ
What percentage of domains with DMARC actually enforce it?
Published estimates suggest between 20% and 30% of domains that have a DMARC record use p=quarantine or p=reject. The majority are at p=none. When you factor in overall DMARC adoption, that means only 4-6% of all mail-sending domains have any real DMARC protection.
Does having a DMARC record mean my domain is protected?
No. A DMARC record at p=none provides no protection. It collects reports. Only p=quarantine and p=reject provide actual protection against impersonation.
What is the difference between p=none, p=quarantine, and p=reject?
p=none collects reports but takes no action. p=quarantine directs receiving servers to treat failing mail as suspicious, typically by flagging or filtering it. p=reject instructs receiving servers to refuse failing mail entirely.
How do I check if my domain has DMARC and what policy it uses?
Run dig +short TXT _dmarc.yourdomain.com from a terminal. The p= value in the record tells you the policy. To understand which sources are sending mail and which are failing, you need to read the aggregate reports sent to your RUA address.