DMARC Failure Reports (RFC 9991)
Per-message DMARC failure ("forensic") reports — ARF format, required fields, the ruf/fo tags, privacy constraints, and why few providers send them.
Reference3 min read
Who it is for ESP operators, Senders
Applies to senders on any platform
ContentsOn this page — 6 sections
When your aggregate DMARC reports show a source failing, a failure report can show you a single failing message, so you can see why it failed. When your domain's DMARC record lists an address for failure reports, receivers can send that address a report each time a specific message fails DMARC. These failure reports are often called "forensic reports", and they differ from the daily statistical aggregate reports.
RFC 9991 defines them. It is a Standards Track specification published in May 2026, and one of the DMARCbis documents, with RFC 9989 and RFC 9990. It updates RFC 6591 and replaces the part of RFC 7489 that covered failure reporting.
Failure reports serve two purposes: diagnosing individual authentication failures first seen in aggregate data, and revealing quickly when someone is actively abusing your domain directly.
Triggering: the ruf and fo tags
These tags are set in the domain's DMARC record (see the tag registry):
| Tag | Role |
|---|---|
ruf= |
A comma-separated list of mailto: URIs that receive failure reports. The receiver must attempt delivery to every destination listed. External destinations must be verified in the same way as for aggregate reports (<policy-domain>._report._dmarc.<destination-host>). |
fo= |
When to report. 0 (the default) means only when no mechanism produced an aligned pass. 1 means when any mechanism failed. d means on any DKIM failure, whatever the alignment. s means on any SPF failure, whatever the alignment. Values can be combined, separated by colons (for example, fo=1:d:s). |
Reports are "normally generated and sent almost immediately after the Mail Receiver detects a DMARC failure". They arrive almost in real time, unlike the daily aggregate reports.
Report format
Failure reports use the Abuse Reporting Format (ARF) of RFC 6591 (message/feedback-report, with the feedback type auth-failure), with fields added for DMARC:
| Field | Required? | Contents |
|---|---|---|
Identity-Alignment |
Required | A comma-separated list of the mechanisms that failed alignment: dkim, spf, or none. |
DKIM-Domain, DKIM-Identity, DKIM-Selector |
Required for DKIM failures | Which signature failed (d=, i=, s=). |
SPF-DNS |
Required for SPF failures | The SPF DNS record involved. |
Delivery-Result |
Optional | What the receiver did with the message. |
DKIM-Canonicalized-Header, DKIM-Canonicalized-Body |
Optional | The canonicalized forms, for debugging broken signatures. |
The report usually includes the headers of the failed message, and possibly its body. That is what makes this format both useful and sensitive for privacy.
Privacy considerations
Failure reports can expose personal data: sender and recipient addresses, message content and, for mailing list traffic, who belongs to the list. RFC 9991 tells report generators to:
- limit reports to targeted diagnosis rather than sending everything;
- validate reporting URIs carefully (verification of external destinations);
- redact message content and identifiers;
- use secure transmission channels.
In practice, most large mailbox providers do not send failure reports at all, or send heavily redacted ones, precisely because of these privacy risks. Publishing ruf= costs nothing, but expect few reports. Aggregate reports are the reliable signal, and failure reports add detail when you get them.
Security considerations
Failure reporting can be used for a denial-of-service attack that floods a mailbox with reports. An attacker who sends large volumes of mail spoofed "from" a victim's domain can make receivers bombard the victim's ruf mailbox. Generators are required to reduce this risk by grouping related events (the ARF Incidents field) and by rate limiting (a maximum number of reports per unit of time).
Operational use
- Use failure reports to find out why a source that fails in aggregate data is failing: a wrong selector, a signature broken by a gateway that adds a footer (compare the canonicalized fields), a bounce domain that is not aligned, and so on.
- Send
ruf=reports to a mailbox with restricted access, because the reports may contain the content of other people's messages. - Do not build monitoring on failure reports alone. Coverage depends on the receiver, and the reports come mostly from smaller providers.
Related articles
- DMARC
- DMARC standard reference
- DMARC aggregate reports
- DKIM, for interpreting the DKIM-* diagnostic fields
Check your own record
The free check reads what your domain publishes in DNS.
In this topic
All 13 in Authentication →