[ Reports & investigation ]

The fo tag and failure-report requests

Choose the intended failure-report trigger and keep it separate from the DMARC pass result, enforcement policy and aggregate reporting.

By the EmailAuth research team · 3 min read

[ Key points ]

  • fo changes reporting requests, not DMARC success or enforcement.
  • 0 and 1 are mutually exclusive; multiple permitted options use colon separators.
  • No report is guaranteed, and ruf destinations require privacy and authorization review.
On this page

The fo tag asks a receiver which failure conditions should generate reports. It does not change the authentication rules or force a receiver to send reports. Understanding that distinction avoids a common mistake: reading a report requested by fo=1 as proof that the message failed DMARC overall.

RFC 9989 section 4.7 defines four values: 0, 1, d and s. The default is 0. The tag is ignored when ruf is absent, and receivers may choose whether to honor the requested options. Review privacy and report-handling readiness before broadening a request.

Understand 0 and 1 in terms of alignment

With fo=0, the requested DMARC failure-report condition is that all underlying authentication mechanisms fail to produce an aligned pass. With fo=1, the condition is that any underlying mechanism fails to produce an aligned pass. The difference concerns the reporting trigger, not a new definition of DMARC success.

A message can pass DMARC through aligned DKIM while SPF fails or is unaligned. That condition can satisfy a fo=1 reporting request even though the message passes DMARC. Calling such a report a contradictory DMARC result confuses the reporting option with the evaluation result.

Distinguish mechanism-specific options

The d value requests a DKIM failure report when a signature fails evaluation, regardless of alignment. The s value requests an SPF failure report when SPF evaluation fails, also regardless of alignment. These are mechanism-specific report requests, not synonyms for the aligned-pass conditions of 0 and 1.

For example, a passing but unaligned SPF identity does not become an SPF evaluation failure solely because it is unaligned. It can matter to the fo=1 aligned-pass condition without satisfying s on that basis. RFC 9991 section 3 discusses the relationship between DMARC and mechanism-specific failure reports; actual generation remains dependent on receiver support and policy.

Use valid combinations deliberately

When requesting more than one option, separate values with colons, such as fo=0:d. Values 0 and 1 are mutually exclusive. Do not publish fo=0:1 as a way to request everything. Keep the existing version, policy and reporting destinations coherent when reviewing a proposed record change.

Illustrative fragment: ruf=mailto:diagnostics@example.com; fo=1. It shows a requested destination and trigger, not a complete DMARC record or a destination that has been authorized for your organization. Do not paste example addresses into production. Confirm supported receiving arrangements and external authorization under RFC 9991 section 5 where applicable.

Walk through two cases

Synthetic case A has aligned DKIM pass and SPF fail. DMARC passes through DKIM; the fo=1 trigger can be met, while fo=0's all-mechanisms condition is not. The s option describes an SPF failure-report condition in this case, subject to receiver behavior.

Synthetic case B has DKIM pass under an unrelated domain and SPF pass under an unrelated domain. Neither mechanism supplies an aligned pass, so DMARC fails and the fo=0 condition is met. Neither the d nor s evaluation-failure condition follows merely from these unaligned passes. These examples explain protocol conditions, not reports observed from a real provider.

Verify the request without promising output

Review the published record, destination ownership, authorization and the report consumer's privacy controls. Use a controlled test with a cooperating receiver if one is available, then record exactly what it generated. An absent report does not prove the tag is invalid or the test passed.

Keep aggregate reporting and enforcement decisions separate. Changing fo does not change p, establish a new SPF authorization or repair a DKIM signature. Its purpose is to request a different set of potentially sensitive diagnostic reports.

Read a mechanism-failure example

Synthetic case C has a failed DKIM signature and an aligned SPF pass. DMARC passes through SPF. The fo=1 condition can be met because DKIM supplied no aligned pass, and d describes the failed-signature reporting condition. The fo=0 condition is not met because SPF provided an aligned pass; s does not follow from an SPF pass. A request such as fo=1:d expresses the two relevant conditions, but does not oblige a receiver to generate either report. Choose it only if the diagnostic purpose and report-handling controls justify the broader request.

Keep a compact investigation record

Use this suggested worksheet for the route under review. It is a planning aid, not evidence of an executed test.

  • Need: the diagnostic question and the narrowest trigger that addresses it.
  • Record: current ruf and fo values, ensuring 0 and 1 are not combined.
  • Destination: ownership, external authorization where needed, access and retention decisions.
  • Observation: receiver support and actual reports received; silence is inconclusive.

[ Takeaway ]

fo changes reporting requests, not DMARC success or enforcement. 0 and 1 are mutually exclusive; multiple permitted options use colon separators. No report is guaranteed, and ruf destinations require privacy and authorization review.

[ By role ]

What this means for you

Choose your role for practical next steps.

IT / Mail Admin

Read each trigger precisely

Alignment-based and mechanism-specific conditions are different.

Next steps

  1. Use colons for valid combinations.
  2. Never combine 0 and 1.
  3. Record actual receiver behavior separately.

CISO / SecOps

Do not equate reports with failures

A fo=1 report can describe mail that passed DMARC.

Next steps

  1. Require precise incident labels.
  2. Check destination authorization.
  3. Keep enforcement and reporting approvals distinct.

Founder / Non-technical

Understand the scope of a diagnostic request

Broader reporting can expose more message details without changing protection.

Next steps

  1. Define the diagnostic need.
  2. Review privacy impact.
  3. Set a review date for broader requests.

[ FAQs ]

Frequently asked questions

What is the default fo value?

The default is 0, requesting a DMARC failure report when all underlying mechanisms fail to produce an aligned pass.

RFC 9989 §4.7

Does fo work without ruf?

No. RFC 9989 requires fo to be ignored when ruf is absent.

RFC 9989 §4.7

Can fo=1 report on DMARC-passing mail?

Yes. One mechanism can lack an aligned pass while the other supplies the aligned pass needed for DMARC.

RFC 9989 §4.7

Can I combine 0 and 1?

No. They are mutually exclusive; multiple permitted values use colon separators.

RFC 9989 §4.7

Does d mean unaligned DKIM?

No. It requests a DKIM failure report for a signature that fails evaluation, regardless of alignment.

RFC 9989 §4.7

Does s trigger simply because SPF is unaligned?

No. Its condition is failed SPF evaluation, not merely a passing identity that lacks alignment.

RFC 9989 §4.7

Will a receiver honor every requested option?

Not necessarily. Report generation and options remain subject to receiver implementation and policy.

RFC 9991 §3

Does changing fo alter enforcement?

No. It changes a reporting request, not p or the DMARC authentication decision.

RFC 9989 §4.7

[ Sources ]

Sources

  1. RFC 9989: Domain-based Message Authentication, Reporting, and Conformance

    Sections §4.4 · §4.5 · §4.7

  2. RFC 9991: DMARC Failure Reporting

    Sections §2 · §3 · §5 · §7

[ Glossary ]

Glossary

Identifier alignment
The required relationship between the author domain and an authenticated SPF or DKIM domain for DMARC.

RFC 9989 §4.4

Aggregate reporting request (rua)
A DMARC tag specifying destinations for aggregate authentication reports.

RFC 9989 §4.7

Failure reporting request (ruf)
A DMARC tag specifying destinations for potentially sensitive message-specific failure information.

RFC 9989 §4.7

Failure reporting options (fo)
Requested failure-report conditions, considered only with a ruf destination; they do not change the DMARC pass condition.

RFC 9989 §4.7

Enterprise provenance

Why top financial institutions and governments retired their email security dashboards.

Traditional email authentication platforms sell you a dashboard and ask your engineers to do the labour. In high-stakes environments, manual oversight means delayed enforcement, configuration drift and unmonitored shadow domains.

EmailAuth is the agentic email provenance platform. Our agents enforce p=reject, keep third-party senders aligned and move your domains to full RFC 9989 compliance, the new DMARC standard,, with human-in-the-loop auditability.

Governments Large enterprises Tier-1 financial institutions

SaaS · Dedicated tenancy · Air-gapped on-prem · BYOK encryption

Knowledge Base