Deliverability · Practical guide
DKIM body hash mismatch: locate the message modification
Compare the signed outgoing body with the received path to find changes made after DKIM signing.
Reviewed · Examples are illustrative
Who this helps: Operators diagnosing authentication, receiving-policy and delivery failures.
Define the decision
A body-hash mismatch points toward a difference in the signed body representation, rather than simply a missing DNS selector. Gateways, disclaimers and message rewriting deserve investigation before key replacement.
Work through the procedure
- Keep the original received message and the full signature result.
- Identify where signing occurs in the transport path.
- Compare a direct controlled route with the route that adds a disclaimer or rewrites content.
- Move legitimate modifications before signing where the mail architecture supports it, then retest.
Worked example
The following is a synthetic example for this procedure, not a customer result or performance benchmark.
Path A: compose → sign → receive: DKIM passes
Path B: compose → sign → append legal footer → receive: body hash fails
Investigation: downstream footer service and signing orderRead the result
This is a controlled hypothesis, not proof that every footer breaks every signature. Canonicalization tolerates some representation differences, while substantive body changes can invalidate the signed content.
Check before moving on
- Compare messages generated by the same sender configuration.
- Record the canonicalization and signing domain for the failing sample.
Limits and next action
Do not weaken verification or remove required organizational controls just to make a test pass. Coordinate a transport-order correction with the mail administrator.
Source references
Worked examples are illustrative. Editorial procedures are suggested methods, not measured performance claims or promises of additional product features.
Related guides
- DKIM: signed message evidence and the signing domain →
- Set up DKIM and verify the signature actually being used →
- DKIM selector not found: query the name in the actual signature →