A DMARC record without a rua= tag is a policy with no feedback. Receivers will enforce it, but you will never learn which of your senders are failing until someone complains that their mail vanished. Adding aggregate reporting is a small change — one tag, one mailbox — and it is what turns DMARC from a guess into a measurement. This guide covers the mailbox, the record change, the cross-domain authorisation step that silently breaks most vendor setups, and how to confirm reports are genuinely arriving.
You need an existing DMARC record and the ability to edit DNS for your domain. If you have not published one yet, start with How to Configure DMARC — publish p=none first, add reporting here, and only then consider enforcement.
Step 1: Decide Where Reports Should Land
Aggregate reports arrive as ordinary email with a compressed XML attachment. Volume scales with how many receivers see your mail — a small domain gets a handful a day, a large one gets hundreds. Three workable destinations:
- A dedicated mailbox on your own domain —
dmarc@example.com. Simplest option, no authorisation record needed, and you keep the raw files. - A distribution list or shared mailbox — works the same way, and survives people leaving the team.
- A third-party analytics platform — they give you an address on their domain, which requires the extra authorisation step in Step 4.
Step 2: Create the Mailbox
Create dmarc@example.com as a real mailbox — not an alias that forwards elsewhere, since forwarding can complicate retrieval later. Then make sure it can actually receive:
- Confirm the domain's MX records resolve and accept mail for that address.
- Relax spam filtering for it. Bulk XML attachments from unfamiliar senders is close to a textbook spam profile, and reports landing in Junk is one of the most common "no reports arriving" causes.
- Allow ZIP and GZ attachments. Some corporate policies strip them by default.
# Confirm mail can be delivered to the domain at all
dig +short MX example.com
# Confirm the address accepts mail (expect 250 on RCPT TO)
swaks --to dmarc@example.com --from test@example.net --server mx.example.comStep 3: Add the rua Tag to Your DMARC Record
Look up what you currently publish, then add rua= to it. Everything else stays as it is.
# What is published now
dig +short TXT _dmarc.example.com
"v=DMARC1; p=none"Add the reporting address:
v=DMARC1; p=none; rua=mailto:dmarc@example.comIn your DNS provider, this is a TXT record with host _dmarc and the above as its value. Some options worth knowing:
# Two destinations — your mailbox and a vendor
rua=mailto:dmarc@example.com,mailto:reports@vendor.example
# Skip reports over 10 MB (rare, but avoids attachment-size bounces)
rua=mailto:dmarc@example.com!10m
# Request 6-hourly reports — advisory only, most receivers still send daily
v=DMARC1; p=none; rua=mailto:dmarc@example.com; ri=21600rua= changes nothing about delivery. It is purely additive, so there is no risk in adding it to an existing p=reject record — and if you are enforcing without reports, you should add it today.Step 4: Authorise Cross-Domain Reporting
This is the step that quietly breaks vendor setups. If the rua address is on a different organizational domain from the DMARC record, the receiving domain must publish a record confirming it consents to receiving your reports. Without it, conforming receivers discard the reports and send nothing — with no error anywhere.
The record lives on the destination domain and is named after your domain:
# You publish: _dmarc.example.com -> rua=mailto:reports@vendor.example
# Vendor publishes:
example.com._report._dmarc.vendor.example. IN TXT "v=DMARC1"Reputable DMARC platforms create this automatically when you add a domain to their dashboard, but it is worth verifying rather than assuming:
dig +short TXT example.com._report._dmarc.vendor.example
"v=DMARC1" # present — reports will be accepted
# empty output means reports are being droppedSending to an address on your own domain — or any subdomain of it — needs none of this. It is one good reason to start with your own mailbox before adding a vendor.
Step 5: Verify the Record Parses
A syntax error means no reports and no warning. Check the published record before you start waiting:
dig +short TXT _dmarc.example.com
# Expect exactly ONE line starting v=DMARC1.
# Two records = broken; receivers treat the domain as having no policy.
dig +short TXT _dmarc.example.com | grep -c DMARC1Common mistakes at this point, all of which produce a record that looks fine:
rua=mailto: dmarc@example.com— a space after the colon invalidates the URI.rua=dmarc@example.com— themailto:scheme is required.rau=— a typo. Unknown tags are ignored silently, so reporting is simply off.- Smart quotes pasted from a document instead of ASCII quotes.
- The host field set to
_dmarc.example.comin a provider that already appends the domain, producing_dmarc.example.com.example.com.
The DMARC Lookup tool resolves the record and flags syntax problems without you having to eyeball it.
Step 6: Wait, Then Confirm Reports Arrive
The first reports land within 24 to 72 hours. They only come from receivers that actually saw mail from your domain, so a domain sending very little may wait longer.
Reports have a machine-readable subject line:
Subject: Report Domain: example.com Submitter: google.com
Report-ID: 4829174726351928374
Attachment: google.com!example.com!1753574400!1753660799.zipThe filename encodes the reporting receiver, your domain, and the Unix start and end timestamps of the window. If nothing has arrived after 72 hours, work through these in order:
- Check the Junk folder — the single most common cause.
- Re-check the published record with
dig; a typo disables reporting silently. - If the destination is another domain, verify the
_report._dmarcrecord exists. - Confirm the mailbox accepts ZIP and GZ attachments.
- Confirm your domain is actually sending mail — no traffic means no reports.
Step 7: Read the First Report
Unpack the attachment and take a look before deciding on tooling:
unzip -o 'google.com!example.com!1753574400!1753660799.zip'
# Sources and volumes at a glance
grep -oP '(?<=<source_ip>)[^<]+' *.xml | sort | uniq -c | sort -rn
# Total messages covered by this report
grep -oP '(?<=<count>)[0-9]+' *.xml | paste -sd+ | bcRaw XML is fine once and tiresome by the third day. Load the file into the DMARC Report Analyzer for a readable table of sources, alignment and disposition, and see How to Read Your DMARC Reports for how to interpret each column.
Step 8: Make It a Habit
The point of reporting is to reach enforcement safely and stay there. A sustainable routine:
- Weekly during rollout — inventory every source, chase down anything unfamiliar, and fix alignment until legitimate senders show an aligned pass.
- Monthly once at
p=reject— new SaaS tools get adopted without anyone telling you, and each one can start silently bouncing. - Keep the mailbox even if you later add a vendor. Raw reports are your fallback if the vendor relationship ends.
Once reports are flowing and you can account for every sender, the next step is rolling out enforcement.
Frequently Asked Questions
How long until the first report arrives?
Usually 24 to 72 hours. Receivers batch a full day of data before sending, and they only report on mail they actually received — so a low-volume domain may see nothing for several days simply because no reporting receiver got mail from it.
Can I send reports to more than one address?
Yes. rua accepts a comma-separated list, and a common setup is one mailbox you control plus one analytics vendor. Each address on an external domain needs its own _report._dmarc authorisation record.
Do I need a paid DMARC monitoring service?
Not to get started. A dedicated mailbox and an analyzer will carry a small or medium domain through a full rollout. Paid platforms earn their place at scale — many domains, long retention, trend alerting — rather than by revealing anything the XML does not already contain.
Will enabling reporting affect my email delivery?
No. The rua tag only tells receivers where to send statistics. Delivery is governed by p= and the authentication result, neither of which reporting touches.
Why do I get reports from providers I have never sent mail to?
Because someone is sending mail that claims to be from your domain and it reached them. That is exactly the signal DMARC exists to surface — check whether those sources are a forgotten legitimate sender or an actual spoofing attempt.
Should I also set up ruf forensic reporting?
Usually not. Google and Microsoft do not send forensic reports, so the tag often yields nothing, and what does arrive contains third-party recipient addresses and message content. See RUA vs RUF for the trade-off in full.