DMARC rua and ruf: how to set up DMARC reporting addresses
rua asks receivers to send daily aggregate DMARC reports; ruf asks for per-message failure reports. Both take mailto: addresses separated by commas, such as rua=mailto:dmarc@example.com. If the address is on a different organizational domain, that domain must publish a TXT record like example.com._report._dmarc.reports.example.net containing v=DMARC1, or receivers ignore it.
On this page 7 sections
The rua and ruf tags are the reporting half of DMARC. Without them, you can publish a policy but you'll never see who sends mail as your domain, which makes it hard to move safely to enforcement. This guide covers the syntax, sending reports to another domain, the privacy trade-offs of failure reports, and what to expect in your inbox.
What are rua and ruf?
Both tags are defined in RFC 9989, section 4.7, with the report formats in two companion documents:
| Item | rua |
ruf |
|---|---|---|
| Report type | Aggregate | Failure (once called forensic) |
| Defined in | RFC 9990 | RFC 9991 |
| What's in it | Counts per sending IP, SPF/DKIM/DMARC results, alignment, disposition | Details of one failed message: headers, sometimes the body |
| When it arrives | "Daily (or more frequent)" (RFC 9990) | "Almost immediately" after a failure (RFC 9991) |
| Format | Gzipped XML attachment | Abuse Reporting Format (ARF) message |
| Who sends it | Most large mailbox providers | Few; "most Mail Receivers refuse to send them out of privacy concerns" (RFC 9989, section 10.2) |
| Needed? | Yes, for any rollout | Optional, for diagnosis |
If a tag is missing, receivers MUST NOT generate that kind of report for your domain. No rua means no aggregate reports at all.
How do you write rua and ruf addresses?
The syntax is a comma-separated list of URIs. Receivers that send reports MUST support mailto:, and RFC 9990 notes that other delivery methods could be added later, so in practice every address is a mailto::
_dmarc.example.com. TXT "v=DMARC1; p=none; rua=mailto:dmarc-reports@example.com"
The rules that trip people up:
- Include
mailto:.rua=dmarc@example.comisn't a valid URI, and receivers won't send to it. - Separate addresses with commas, each with its own
mailto::rua=mailto:a@example.com,mailto:b@example.net. Section 4.6 says a report "SHOULD be sent to each listed URI". - Don't use a semicolon between addresses. Semicolons separate tags, so anything after one is read as a new tag.
- Encode commas and exclamation points inside an address. The ABNF in section 4.8 says they "MUST be encoded".
- Drop size limits. RFC 7489 allowed a suffix like
!10m. RFC 9989 marks it obsolete and says reporters should ignore it.
ruf uses the same syntax. The fo tag controls when failure reports are generated and is ignored unless ruf is present: fo=0 (default) when SPF and DKIM both fail to produce an aligned pass, fo=1 when either does, d for any DKIM failure and s for any SPF failure. Our DMARC record examples explain every tag, and the DMARC Record Generator writes the syntax for you.
How do you send DMARC reports to another domain?
Reports often go to a reporting service, or to a mailbox on a different domain you own. To stop abuse, receivers check that the other domain agreed.
Why the check exists
Without it, RFC 9990, section 4 explains, an attacker could publish a DMARC record pointing reports at a victim's address, then send lots of failing mail "to a wide variety of destinations," and "the victim will in turn be flooded with unwanted reports." RFC 9991 applies the same check to failure reports.
When it applies
The check runs when the organizational domain of your DMARC record isn't the same as the organizational domain of the report address. So:
| Your domain | Report address | Authorization needed? |
|---|---|---|
example.com |
dmarc@example.com |
No |
example.com |
dmarc@reports.example.com |
No: same organizational domain |
example.com |
dmarc@example.net |
Yes, from example.net |
example.com |
abc123@rua.reportingservice.example |
Yes, from the service |
The record the other domain publishes
The receiver builds a name from three parts: your domain, _report._dmarc, and the host part of the report address. Then it looks for a TXT record there that starts with v=DMARC1.
For example.com sending reports to dmarc@example.net, the owner of example.net publishes:
example.com._report._dmarc.example.net. TXT "v=DMARC1"
A few details from RFC 9990:
- The other domain publishes it, not you. Reporting services do this for each customer domain, or use a wildcard.
- A wildcard works. A record at
*._report._dmarc.example.netcontainingv=DMARC1accepts reports for any domain. - The destination can override the address. The authorization record may include its own
ruaorruf, but only with the same destination host. - Failure means silence. If the check fails, "the URI MUST be ignored by the Mail Receiver generating the report." You get no error; the reports simply never arrive.
If you own both domains, RFC 9989, section 11.6 suggests a simpler route: use an address on your own domain and forward it automatically to the external mailbox.
The DMARC Checker looks up the authorization record for each outside rua address and warns if it's missing.
Should you ask for failure (ruf) reports?
For most small businesses, no. Treat ruf as a diagnostic tool you switch on briefly, not a permanent setting.
Privacy
Failure reports are about individual messages. RFC 9991, section 7 says they "may include PII and non-public information (NPI)" because "these reports may contain message content as well as trace header fields." Its examples include "product launches, termination notices for employees, or calendar data." They can also reveal who is on a mailing list or where mail was forwarded.
RFC 9991 notes that "many large-scale providers limit or entirely disable the generation of failure reports." Microsoft is explicit: "Microsoft 365 doesn't send DMARC Forensic reports (also known as DMARC Failure reports), even if a valid ruf=mailto: address exists."
If you do turn them on, RFC 9991 recommends that you:
- limit them to "targeted diagnostic activities" for a limited time,
- control and validate the reporting addresses carefully,
- keep report mail separate from other mail and limit access to trained people,
- open them in a sandbox, since unredacted reports can carry phishing links and malware.
Security
Section 11.6 of RFC 9989 warns that ruf addresses "are thus more attractive targets for intrusion attempts" than rua addresses, and that an attacker who tampers with your DNS could redirect failure data. It recommends DNSSEC if this is a concern.
Aggregate reports are low-risk
RFC 9990 says aggregate reports contain no "individual mail addresses, IP addresses of individuals, or the content of any messages." RFC 9989 section 10.1 adds one caveat: for a small organization, a report from a particular domain can still reveal sensitive business information. Use a mailbox with appropriate access controls.
How many DMARC reports should you expect?
It depends on how many organizations you send to, not just how much you send. Google says the number "depends on how much email your domain sends and how many domains you send to," that you "can receive many reports every day," and that "large organizations might get up to hundreds or even thousands of reports daily."
A few patterns help set expectations:
- One report per receiver per period. Each reporting receiver sends a summary, usually covering one UTC day.
- Separate reports per policy domain. RFC 9990 says a separate report must be generated for each DMARC policy domain, so a subdomain with its own record gets its own reports.
- Quiet days are normal. A small business that emails a few dozen organizations may get a handful of reports a day, and none from receivers that don't report.
- Failure reports can spike. If you enable
rufduring a spoofing campaign, every failing message can trigger one. RFC 9991 requires report generators to rate-limit, but the limits are theirs to choose.
For context, in our scan of the Tranco top 1,000 domains in October 2026, 68.6% of domains requested aggregate reports with rua.
How do you set up the reporting mailbox?
- Create a dedicated address, such as
dmarc-reports@yourdomain. Google and Microsoft both recommend a dedicated mailbox or group rather than a person's inbox. - Make sure it accepts the reports. They're automated emails with
.xml.gzor.xmlattachments. Check that your spam filter doesn't quarantine them or block compressed attachments for this address. RFC 9990 requires report emails to pass DMARC themselves, which helps you trust them. - Add
ruato your record, withp=noneif you're just starting. The DMARC Record Generator builds it. - If you use a reporting service, add its address and confirm it publishes the
_report._dmarcauthorization. Run the DMARC Checker to verify. - Wait a day or two, then open the first reports. The DMARC Report Analyzer turns the XML into a readable table, and how to read DMARC reports explains each field.
- Add
rufonly if you need it, for a fixed period, and remove it when you're done.
Next steps
- Check that your record has a working
ruaaddress with the DMARC Checker, or run a full Email Health Check. - Use the reports to find every service that sends as your domain, then follow moving DMARC from p=none to p=reject.
- If you're tuning alignment, read DMARC alignment: relaxed vs strict.
- If reports never arrive, check whether your inbound filtering is holding them. With iBlockSpam, each user's quarantine and digest emails show what was held, and you can add the report senders to an allow list.
Browse our other SPF, DKIM and DMARC guides.
Frequently asked questions
What is the difference between rua and ruf in DMARC?
rua requests aggregate reports: summaries, usually daily, of how much mail used your domain, from which IP addresses, and whether SPF, DKIM and DMARC passed. ruf requests failure reports about individual messages that failed, which can include headers or content. Most domains only need rua.
Can I send DMARC reports to an email address on another domain?
Yes, but the other domain has to agree. Receivers look for a TXT record at yourdomain._report._dmarc.theirdomain starting with v=DMARC1. If it isn't there, they ignore that address. DMARC reporting services publish this record for their customers; for your own second domain, you publish it yourself.
Why am I not getting any DMARC reports?
Common causes are a missing mailto: prefix, an address on another domain without the _report._dmarc authorization record, a mailbox that rejects or filters the report emails, or simply low mail volume. Reports also only come from receivers that send them, and they typically cover a full UTC day, so allow a day or two.
Do I need a ruf address?
Usually not. Failure reports can contain personal data and message content, and many large receivers don't send them. Microsoft 365 says it doesn't send them even when a valid ruf address exists. Add ruf for a short diagnostic period if you have a specific failure to investigate and a safe place to store the reports.
Can I list more than one rua address?
Yes. Separate them with commas, for example rua=mailto:dmarc@example.com,mailto:id@reports.example.net. RFC 9989 says a report should be sent to each listed address. Each address on another organizational domain needs its own authorization record from that domain.
Do DMARC aggregate reports contain personal information?
RFC 9990 says they contain no individual mail addresses, no IP addresses of individuals and no message content. RFC 9989 still warns that for a small organization, reports may give some insight into sending patterns, so restrict who can read the reporting mailbox.
Sources
- RFC 9989: DMARC, sections 4.7, 10 and 11.6
- RFC 9990: DMARC Aggregate Reporting, section 4 (Verifying External Destinations)
- RFC 9991: DMARC Failure Reporting, section 7 (Privacy Considerations)
- Google Workspace Admin Help: About DMARC reports
- Microsoft Learn: Set up DMARC to validate email in Microsoft 365
See how your domain measures up
Run a free Email Health Check: MX, SPF, DKIM, DMARC and transport security in one scan, with the raw records shown. No sign-up.
Keep reading
Moving DMARC from p=none to p=reject: a staged rollout for small businesses
A staged plan to move DMARC from monitoring to reject without blocking your own mail, including what changes when a filtering gateway sits in front.
9 min read SPF, DKIM & DMARCDMARC record examples, explained tag by tag
Copy-paste DMARC record examples for monitoring, quarantine and reject, with each tag explained and what RFC 9989 changed: pct removed, t, np and psd added.
9 min read SPF, DKIM & DMARCDMARC alignment: relaxed vs strict, and what adkim and aspf do
How DMARC alignment works, what adkim and aspf do, how the organizational domain is found, a pass/fail examples table, and when strict alignment is worth it.
9 min read