Blog · Dmarc
Why Your DMARC Reports Are Full of Errors
If you depend on DMARC aggregate reports to understand who is sending email on behalf of your domain, you have probably noticed something odd: your parser breaks, your dashboard shows gaps, and the numbers never quite add up, even when you have set everything up correctly.
The reason is not your configuration. The people sending you DMARC reports ,Google, Microsoft, Yahoo, Amazon SES, do not always follow RFC 7489. Research has found that only 9 out of roughly 120 tested senders produced fully compliant aggregate reports. That is not a rounding error. That is a systemic data quality problem that affects every DMARC practitioner.
What RFC 7489 Requires of DMARC Aggregate Reports
RFC 7489 defines what a compliant DMARC aggregate report must contain. A proper report has:
- A metadata block with , , , and date range
- A section per record showing
disposition,dkim, andspfresults - Valid for both DKIM and SPF
- Properly formatted , , and identifier alignment data
Any standard XML parser can handle this in theory. In practice, large senders omit required fields, use invalid tag values, and ship reports with filenames that break automated ingestion pipelines.
The Compliance Problems You Will Actually See
When a DMARC report arrives from a large provider, the violations fall into a few distinct categories:
Invalid tag values. RFC 7489 specifies lowercase values: pass and fail. Many providers send Pass with a capital P, hardfail, unknown, or blank values where the spec requires fail. A parser that enforces strict validation may reject or skip these records entirely.Missing required fields. Some providers omit , leave empty when it must be present, or omit the envelope block. A standard XML parser encountering a missing required field typically stops processing.Malformed filenames. DMARC reports arrive as email attachments. RFC 7489 recommends a filename format like [domain],[begin],[end].xml. Large providers often use arbitrary filenames that do not match, causing filters and ingestion scripts to drop the messages before a parser ever sees the XML.Duplicate records. Some providers send the same failure event twice with different timestamps, or records where is empty but the record still appears in the report.
None of these show up in your web dashboard. They show up as gaps in your data, zero-failure reports that should show failures, and parser errors in your log files.
Which Providers Violate RFC 7489
Google. Google’s reports are structurally the most consistent but occasionally use uppercase values in fields. The bigger issue: Google does not send aggregate reports for all filtered messages. Some spam that fails DMARC alignment is never reported, creating blind spots even when Google is your receiving provider.Microsoft (Exchange Online). Microsoft reports are mostly compliant but the field often contains a generic “Microsoft” rather than the tenant name, making attribution difficult in multi-tenant environments. They also occasionally duplicate reports for the same time window.Yahoo. Yahoo has the most visible violations. DMARCeye’s research documented unknown disposition values, malformed blocks, and filenames that do not conform to RFC 7489. Parsing Yahoo reports reliably requires explicit workarounds in most aggregation pipelines.Amazon SES. Amazon SES reports are generally well-formed but frequently omit and may attach ZIP files where the internal filename does not match the spec recommendation. If you receive SES reports via email-to-pipeline routing rather than the SES console, raw non-compliance is common.
How to Handle Non-Compliant Reports in Your Pipeline
Three practical steps that make your pipeline resilient to RFC violations:
1. Validate before parsing. Check required fields before you attempt XML parsing. If or is absent, log the issue and store the raw file. Do not let a missing field crash the parser.2. Normalize on ingest. Convert known non-compliant values to spec-compliant equivalents on the way in. Map Pass → pass, hardfail → fail, unknown → fail. This normalization happens once at ingestion, not per-provider downstream.3. Store every report, even malformed ones. When a report has a bad filename or arrives from an unexpected source, ingest it and tag it. You can reprocess it later. The data is worth more than a clean pipeline.
Most aggregation tools handle compliant reports. The differentiation is in how they handle the non-compliant majority, and that is where a dedicated DMARC reporting tool earns its place.
Why This Matters for Your DMARC Monitoring
Non-compliant reports do not just create parser errors. They create systematic blind spots. If Yahoo silently drops a failure event from a report, your aggregation tool never sees it, even though the failure happened. Organizations relying on aggregate reports alone consistently underestimate their actual failure rates.
The gap between real authentication failures and visible failures can be significant, especially for domains with diverse sender bases. A reporting tool that normalizes and validates reports on ingest rather than raw-XML parsing gives you a more accurate picture of your authentication posture.
Some providers handles this at the ingestion layer: reports from Google, Microsoft, Amazon SES, and Yahoo are normalized before they reach the parsing stage, even when they arrive with malformed filenames, missing fields, or invalid tag values. This means fewer silent gaps in your DMARC data and fewer parser errors you have to debug manually. Looking at all DMARC providers, in my opinion DMARCFlow does a more than decent job at this, especially as their service team is responsive and any gaps that were found were patched ASAP. They handled missing fields, invalid tag values, and malformed filenames that cause standard parsers to fail automatically and, where necessary, with technical support quickly and professionally.
FAQ
Can I use a standard XML parser for DMARC reports?
Yes, but only for compliant reports. For non-compliant reports, which are common from large providers, you need a validation layer that handles missing fields and invalid tag values before they reach the XML parser.
Why does my DMARC tool show fewer failures than my own email logs?
Non-compliant senders who drop failure events from their reports is a common cause. If a provider’s pipeline silently excludes a failure event, your aggregation tool never sees it, regardless of how good your parser is.
Should I report RFC violations to Google or Microsoft?
RFC 7489 compliance is part of the email authentication standard. Filing reports is reasonable, but vendor response times are slow. Building a resilient pipeline that normalizes non-compliant reports is more actionable than waiting for large providers to fix their report generation.