Blog · Dmarc
Why Setting DMARC p=reject Without Monitoring Tools Is a Fast Way to Break Email Delivery
Someone adds a DMARC record with p=reject, waits three days, then discovers that password resets, booking confirmations, and newsletter replies have been landing in nowhere for 72 hours with no notification. No bounce message. No warning. Just silence.
This is the number one way DMARC breaks legitimate email. It is not a bug in the standard. It is the predictable result of telling receivers to refuse mail you have not audited yet.
The short answer to "can I set DMARC to reject without tools or experience?" is: technically yes, safely no. Here is why, and how to do it right.
What Actually Breaks When You Set p=reject Cold
Three failure patterns account for most silent email deaths when domains move to p=reject:
Third-party senders with your From address but their own infrastructure. A marketing platform, a CRM, an invoicing tool, a legacy system -- all of these often send mail where the envelope MAIL FROM domain belongs to the vendor, not to you. The From header shows your domain. The SPF check runs against the vendor's server IP. DMARC alignment fails because the envelope domain does not match your From domain. The receiving server refuses the message, and you never find out unless a user complains.
Mailing lists and forwarding services that rewrite headers. A subscriber uses a forwarding service that repackages your newsletter and sends it from their own infrastructure. The SPF check runs against the forwarder's server, which is not in your SPF record. The DKIM signature, if any survives the rewrite, uses the forwarder's signing domain, which does not align with your From header. DMARC fails. The forwarding service gets rejected, and your subscriber stops receiving mail without knowing why.
Subdomains that inherit the root domain policy. If you set p=reject on example.com and a subdomain like marketing.example.com sends mail without its own DMARC record, it inherits the root domain policy. If marketing.example.com has no SPF record of its own and does not DKIM-sign with an aligned domain, all of its outbound mail is refused. This catches a lot of small businesses off guard because their marketing platform uses a subdomain they did not realize was covered by their DMARC record.
None of these failures produce bounce messages to your domain. The receiving server refuses the mail and logs it locally. Your domain gets no signal that something went wrong unless you have aggregate reports.
Why Monitoring First Catches What Rejecting Breaks
DMARC has three policy levels: p=none, p=quarantine, and p=reject.
p=none tells receivers to accept everything, authenticated or not, and send aggregate reports back to you. You get data about what is failing without any mail being refused.
p=quarantine tells receivers to treat failures as suspicious, usually by sending them to spam. Some mail is affected, but you get a warning before total silence.
p=reject tells receivers to refuse mail that fails DMARC alignment outright. No notification to your domain. No second chances.
The purpose of running at p=none first is to build a complete inventory of every legitimate sender for your domain before you tell receivers to start refusing mail. Aggregate reports are the document that inventory is written in. Without reading them, you are making a reject decision with no data about what will break.
Most domains that move to p=reject cold discover between three and seven misaligned legitimate senders within the first week. Every one of those is a silent email failure.
How to Safely Move From p=none to p=reject
Step 1: Publish p=none with an aggregate report destination. You need a service that receives and parses RFC 8468 XML aggregate reports. DMARCFlow receives these reports and surfaces alignment failures in a dashboard without requiring you to read raw XML.
Step 2: Wait four to eight weeks. You need enough data to cover all your sending patterns: transactional automated mail, newsletters, marketing campaigns, system notifications, and any seasonal or infrequent sends. One or two weeks is not enough if you have monthly newsletters or quarterly automated reports.
Step 3: Review the aggregate reports. Look for any sending source that is producing DKIM passes or SPF passes but is not your own infrastructure. Every unfamiliar source needs one of two outcomes: either it gets authorized (add the sending domain to your SPF record or configure it to DKIM-sign with your domain), or it gets explicitly identified as a third party you do not control, so you can set an appropriate subdomain policy.
Step 4: Set subdomain policies before moving to reject. If you have subdomains that send mail and cannot be immediately aligned, give them their own p=none policy so they do not silently inherit the root domain reject.
Step 5: Move to p=quarantine. Tell receivers to treat failures as suspicious, not as a reason to refuse. Run this for two weeks while continuing to monitor aggregate reports.
Step 6: Review again. If aggregate reports show no unexpected failures and the sources you expect to be passing are actually passing, move to p=reject.
Step 7: Keep monitoring after you reject. New tools, new vendors, new subdomains, and new cloud platforms will introduce new sending sources that need to be tracked. A reject policy does not keep your sending landscape static.
The Minimum Tooling You Need Before p=reject
You do not need an enterprise email security stack. You need:
- A way to receive and read aggregate reports: DMARCFlow or any service that parses RFC 8468 XML reports into human-readable summaries.
- A current inventory of every domain and subdomain you use for sending mail.
- A process to review aggregate reports at least once a month after moving to reject.
That is the minimum viable setup. Everything else is nice to have.
DMARCFlow handles the first requirement. The core function is aggregate report parsing: it receives your reports, shows you exactly which sending sources are producing alignment failures, and alerts you when a new source appears that you have not authorized. A new misaligned sender in your aggregate reports is exactly the signal that means you are not ready to reject yet. Without reading those reports, that signal is invisible.
Frequently Asked Questions
Can I skip straight to p=reject if my domain is small and I know all my senders?
Only if you have personally audited every sending source, including every third-party tool, every marketing platform, every automated system, and every subdomain. If you are not certain that every legitimate sender is aligned, p=none monitoring is the safer starting point. Running it for two weeks costs you nothing and may catch senders you forgot about.
What does a DMARC alignment failure look like in aggregate reports?
In aggregate reports, an alignment failure shows up as a row with an SPF or DKIM result of "fail" or "softfail," a result of "fail" under the policy_evaluated section, and the From domain recorded. If you see a source that is unfamiliar, that is a legitimate sender that is not yet authorized and will be refused if you move to p=reject before fixing it.
My third-party vendor says their emails are authenticated. Do I still need to check the reports?
Yes. Authentication and alignment are different things. A vendor may have valid SPF for their own domain and valid DKIM for their own domain, but that does not help if the From header shows your domain. DMARC requires alignment: the domain in the From header must match the domain validated by SPF or DKIM. Many third-party senders authenticate correctly for their own domain while sending with your From header, which produces DMARC failures you will only find by reading the reports.
Moving to p=reject is the right goal. It is the setting that actually stops spoofing of your domain. But the goal does not justify skipping the step that makes it safe. Monitor first. Fix the failures. Then reject.