Resources  / DMARC and mail

DMARC forensic reports, with an example

A DMARC forensic report, also called a failure report, describes one message that failed DMARC. An aggregate report says "412 messages from this server failed yesterday". A forensic report says "this message, from this server, with this subject, failed just now", and carries its headers. A domain asks for them with the ruf= tag of its DMARC record.

A forensic report example

Forensic reports use the Abuse Reporting Format (ARF): an email in three parts. A short note for people, a machine-readable part that says what failed, and the headers of the message, sometimes with the body. This is a typical one, about a forged invoice:

From: dmarc-forensic@receiver.example
To: dmarc-failures@example.com
Subject: FW: Your invoice is ready
Content-Type: multipart/report; report-type=feedback-report

--part1
Content-Type: text/plain

This is an authentication failure report for a message
received from IP 203.0.113.77 on Wed, 15 Oct 2026 09:12:44 +0000.

--part2
Content-Type: message/feedback-report

Feedback-Type: auth-failure
User-Agent: ReceiverMTA/2.1
Version: 1
Original-Mail-From: <billing@example.com>
Arrival-Date: Wed, 15 Oct 2026 09:12:44 +0000
Source-IP: 203.0.113.77
Reported-Domain: example.com
Authentication-Results: mx.receiver.example;
  dmarc=fail (p=quarantine) header.from=example.com;
  spf=fail smtp.mailfrom=example.com;
  dkim=none
Delivery-Result: spam

--part3
Content-Type: text/rfc822-headers

From: "Example Billing" <billing@example.com>
To: <[redacted]@receiver.example>
Subject: Your invoice is ready
Date: Wed, 15 Oct 2026 09:12:40 +0000
Message-ID: <8f2c9a@mailer.invalid>

Read the middle part first. Source-IP is the server that sent it. The Authentication-Results line says what failed: here SPF failed because 203.0.113.77 is not in the domain's SPF record, and there was no DKIM signature. The headers below show what the recipient saw. A sender of yours that is set up wrong looks like this too, so check the source address before you call it an attack.

Forensic reporting options

The fo= tag says which failures to report. It has no effect without ruf=.

fo=0
The default. Report when SPF and DKIM both fail to give an aligned pass.
fo=1
Report when either one fails. The most reports, and the most useful while you set up.
fo=d
Report when a DKIM signature fails to verify, aligned or not.
fo=s
Report when SPF fails, aligned or not.
v=DMARC1; p=quarantine; rua=mailto:dmarc@example.com; ruf=mailto:dmarc-failures@example.com; fo=1

Why you may get none

Most large mailbox providers, Google and Microsoft among them, do not send forensic reports. A report holds parts of a message somebody else received, and that is personal data. The receivers that do send them often remove the recipient and the body, as in the example. So a domain with ruf= set gets a handful of reports from smaller providers and security gateways, and none from where most of its mail goes.

The address in ruf= receives that data, so it should be a mailbox that few people read and that your privacy notice covers. An address on another domain needs the same permission record as an aggregate report address.

What they are good for

Check your DMARC record to see whether it asks for failure reports, and where they go.