Back to Learning CenterEmail Authentication

Why does a Google DMARC report show DKIM fail?

By Samuel ChenardAugust 12, 20268 min read
Why does a Google DMARC report show DKIM fail?

A DMARC aggregate report from noreply-dmarc-support@google.com with dkim=fail is evidence about a group of messages, not proof that your Google Workspace DKIM setup is broken. First identify the reported source_ip, header_from, DKIM domain, and selector. Then decide whether the source is authorized, whether another aligned identifier passed, and whether a fresh message from that same path reproduces the failure before changing DNS or policy.

At a glance

Quick takeaways

  • The report sender identifies the reporting organization, while the report row identifies mail Google observed for your domain.
  • A policy_evaluated/dkim result is a DMARC alignment result; auth_results/dkim/result is the reported DKIM verification result.
  • An unknown source is an inventory or abuse investigation first, not a DKIM-record change.
  • A legitimate source needs a cause-specific repair: signing configuration, a missing or wrong public key, or a message changed after signing.
  • Do not weaken p, adkim, or aspf merely to make one row look better.
Decision map for interpreting a Google DMARC aggregate-report row with DKIM fail, starting with the source IP and ending with a same-path retest.
Source: Original Palisade deterministic decision map based on the aggregate-report fields in RFC 9990. Open the full-size diagram.

What does the failure mean?

Google can send aggregate DMARC feedback to the rua address in your DMARC record. Under RFC 9990, that XML report groups messages by information including the connecting source_ip, header_from, policy result, and authentication results. It is an aggregate view of the report period, so use the count and date range to scope the investigation rather than treating it as a copy of one message.

The two DKIM fields answer different questions. row/policy_evaluated/dkim records the DKIM identifier-alignment outcome used for DMARC. auth_results/dkim/result records DKIM verification for the reported signing domain and selector. A row can therefore show DKIM verification failure, a valid-but-misaligned signature, or a DMARC pass through aligned SPF. Do not infer which one occurred from dkim=fail alone.

XMLxml
<!-- Synthetic, redacted example. It is not a live Google report. -->
<report_metadata>
  <email>noreply-dmarc-support@google.com</email>
  <date_range><begin>0</begin><end>86400</end></date_range>
</report_metadata>
<record>
  <row><source_ip>203.0.113.42</source_ip><count>7</count>
    <policy_evaluated><disposition>none</disposition><dkim>fail</dkim><spf>pass</spf></policy_evaluated>
  </row>
  <identifiers><header_from>example.com</header_from></identifiers>
  <auth_results><dkim><domain>example.com</domain><selector>mail1</selector><result>fail</result></dkim></auth_results>
</record>

What usually causes it?

The source is not in your authorized sender inventory

If source_ip does not match an approved mail system, do not assume it is a broken legitimate sender. Preserve the row, check the source with the service owner or your mail logs, and look for repeated volume. Aggregate reports are intended to give domain owners visibility into IP addresses sending on their behalf and their authentication outcomes, as RFC 9990 explains. The conclusion that an unmatched IP is unauthorized is an investigation inference, not a property the report can prove by itself.

An authorized sender is not signing with the expected key

When the source is legitimate, compare the reported DKIM domain and selector with that sender's configuration. DKIM verification uses the public key retrieved from the selector record, and RFC 6376 defines the d= signing domain and s= selector as inputs to that lookup. A missing, retired, malformed, or wrong-key record can make the sender's signature fail.

The message changed after it was signed

If a fresh message from the same service shows a verification failure, compare the message path and any downstream processing. DKIM signs selected headers and a hash of the canonicalized body; RFC 6376 specifies that the verifier recomputes the body hash. A footer, disclaimer, link rewrite, gateway, list, or forwarder can therefore break a previously valid signature. That causal mapping is an inference you confirm with the delivered message and Received headers.

The signature verifies but does not align

If the message's verifier result is dkim=pass but the report's policy result for DKIM is fail, the signature may be valid without aligning to header_from. DMARC can still pass through aligned SPF. This is an alignment branch, not a verification repair; use the DKIM alignment troubleshooting guide after you confirm that distinction.

How do I diagnose the failure?

1. Preserve one complete report row and its reporting period

Save the compressed XML safely, then record report_metadata/email, the date range, source_ip, count, header_from, policy_evaluated, and every DKIM result under auth_results. RFC 9990 defines source_ip as the connecting address and count as the number of messages to which that policy evaluation applied. Redact report IDs and any data your incident process treats as sensitive before sharing it.

2. Match the source to an approved sender before editing DNS

Compare the IP and header_from with your sending-service inventory, outbound logs, and any documented source ranges. If the source is not recognized, investigate ownership and spoofing exposure. If it is recognized, identify the system that applied the listed selector. For a broader cross-layer header method, see email authentication failure troubleshooting.

3. Separate verification from DMARC alignment

Read both DKIM locations in the XML. A failed auth_results/dkim/result calls for message and key evidence. A passing verification result with failed policy_evaluated/dkim calls for alignment evidence. RFC 9990 explicitly keeps these fields separate, so a policy relaxation is not a substitute for discovering which condition the row records.

4. Inspect a fresh message from the same sender path

Send a new test through the affected service and preserve the receiver-added Authentication-Results, DKIM-Signature, and Received headers. RFC 8601 defines Authentication-Results as a receiver-added field, so use it from the receiver you are investigating rather than a copied header from an untrusted hop. Capture header.d, header.s, and the verification reason if present.

How do I fix it?

Repair an authorized sender's selector or public key

Only after the source and selector are confirmed, publish or correct the public key at the exact selector name the sender uses. A public lookup is useful for this narrow check: run the Palisade DKIM checker with the reported signing domain and selector. It cannot identify an IP owner, reconstruct an old report, or prove that a historical message was modified.

Move signing after the last content-changing hop

When fresh-message evidence shows post-signing modification, move DKIM signing after the footer, gateway, or rewrite that changes the message, or have the modifying system re-sign it. Do not add a body-length workaround or loosen DMARC policy as a substitute. If the verifier specifically says body hash did not verify, follow the focused DKIM body-hash repair guide.

Contain an unknown source without changing the policy first

For an unknown source, verify ownership and stop unauthorized use through the responsible system or incident process. Keep the current policy decision separate from this technical investigation. Changing p, adkim, or aspf may alter reporting or enforcement, but it does not repair a source that cannot produce an aligned authentication result.

How do I validate the repair?

Repeat the same sending path that produced the row. Confirm the fresh message has the intended header.d and header.s, the receiver's Authentication-Results shows the expected verification and alignment outcome, and the public selector record resolves. Then wait for a later aggregate-report period and compare the affected source's count and results. A passing public key lookup alone does not prove delivery behavior or that Google will report a particular outcome.

Check the reported selector, then address recurring report gaps

If the report names an exact DKIM domain and selector, check whether its public key is currently published before changing it.

Check a DKIM selector

The lookup cannot identify the reporting IP owner, inspect a past message, or explain a receiver's historical verification result. Keep those decisions tied to the aggregate row and a fresh same-path message.

If later report windows keep identifying unknown sources or failing legitimate senders, the work becomes recurring source-specific investigation rather than another one-time selector check. Palisade's DMARC Agent analyzes DMARC aggregate-report data, identifies sending sources and authentication or alignment issues, creates prioritized remediation tickets, and detects when a domain appears ready for the next policy stage.

Start with Palisade

Palisade does not autonomously change DNS or DMARC policy, repair every sender, prove every future message will authenticate, or control a receiver's delivery decision. Your team reviews the evidence and applies changes.

Evidence

Sources and further reading

Questions readers ask

Frequently asked questions

Turn DMARC findings into a managed fix path

Start in Palisade.

Get started

Share this article

Samuel Chenard

Written by

Samuel Chenard

CEO & Co-Founder, Palisade

Samuel Chenard is the CEO and co-founder of Palisade, AI-first DMARC software for IT teams and MSPs, from one domain to thousands.

More from Samuel

Related articles