DKIM Signature Fix: How to Fix Every Common DKIM Error Fast

James Bowers IIJames Bowers II
24 min read

DKIM Signature Fix: How to Fix Every Common DKIM Error Fast

Slug: /information-security-guides/dkim-signature-fix/

H1 (on-page title): DKIM Signature Fix: How to Fix Every Common DKIM Error Fast

Meta title: DKIM Signature Fix: Common Errors & Step-by-Step Fixes (55 chars)

Meta description (≤155 chars): DKIM signature failing? Step-by-step fixes for every common DKIM error, missing signature, body hash mismatch, wrong selector, and more.

Focus keyphrase: DKIM signature fix

Excerpt (1-3 sentences for archive/listing): If your DKIM signature is failing, the error messages rarely tell you what actually broke. This guide walks through every common DKIM signature failure, from missing signatures and body hash mismatches to bad selectors and DNS split-string issues, with the exact fix for each. By the end you will know how to decode any DKIM error and publish a signature that verifies cleanly everywhere it matters.

Suggested featured image alt text: "Technician troubleshooting a DKIM signature failure on an email authentication console, iO™ DKIM Signature Fix Guide"


DKIM is one of those technologies that works beautifully when it works, and makes almost no sense when it does not. Your email is bouncing, or landing in spam, or your DMARC report shows a sea of dkim=fail results, and the error messages read like they were written to confuse you on purpose. "Body hash did not verify." Okay, and?

This guide translates the confusion into action. We will walk through every common DKIM signature failure, explain what it actually means, and give you the precise fix. No guessing. No generic advice. Just the actual cause and the actual solution.

By the end, you will be able to diagnose any DKIM error from a raw email header, know which ones are your fault and which are the receiver's, and have a setup that passes cleanly across Google, Microsoft, Yahoo, Apple, and every other mailbox provider that matters.

Let's get into it.


Key Takeaways

  • Most DKIM failures fall into a few predictable categories. Missing signature, body hash mismatch, wrong selector, key too short, and key not published in DNS. Identifying which bucket you are in gets you 80 percent of the way to the fix.

  • The DKIM signature is cryptographically bound to the message. If anything changes the body or a signed header after the message is signed, the signature breaks. This is why forwarding and mailing lists cause so many problems.

  • A DKIM failure is not always on your end. Forwarders, mailing lists, and ARC-unaware intermediaries can modify messages in transit and break a perfectly valid signature.

  • Use 2048-bit keys, not 1024-bit. RFC 8301 specifies SHA-256 with 2048-bit RSA as the current minimum. Older 1024-bit keys are being phased out by major receivers.

  • Always verify with a DKIM checker before you declare it fixed. A record that looks right in DNS can still fail a real signature verification for reasons you cannot see from the zone file alone. Our DKIM Checker does the full lookup and parse.

  • DKIM, SPF, and DMARC work together. A DKIM pass does not help you if DMARC alignment fails. Treat the three as one system, not three independent tasks.


Table of Contents

  1. First, Confirm It Is Actually a DKIM Problem

  2. Error 1: No DKIM Signature on the Message

  3. Error 2: Body Hash Did Not Verify

  4. Error 3: Signature Syntax Error or Bad Signature

  5. Error 4: Public Key Not Found in DNS

  6. Error 5: Wrong Selector in the Signature

  7. Error 6: Key Too Short or Weak Algorithm

  8. Error 7: Key Rotation Gone Wrong

  9. Error 8: Forwarding and Mailing Lists Break the Signature

  10. Error 9: Multiple or Conflicting Signatures

  11. Error 10: Signature Expired

  12. Error 11: DKIM Passes but DMARC Still Fails

  13. Error 12: DNS TXT Record Split-String Issues

  14. Final Validation Checklist

  15. FAQ


First, Confirm It Is Actually a DKIM Problem

Before you change anything, make sure DKIM is the real culprit. Email authentication has three moving parts (SPF, DKIM, and DMARC), and any of them can produce a delivery failure that looks like a DKIM problem from the outside.

Open a failing message and look at the full headers. You are hunting for the Authentication-Results line:

Authentication-Results: mx.google.com;
  spf=pass smtp.mailfrom=yourdomain.com
  dkim=fail (body hash did not verify) header.d=yourdomain.com
  dmarc=fail (p=REJECT) header.from=yourdomain.com

If the dkim= field says fail, neutral, none, permerror, temperror, or policy, you are in the right place. If it says pass and DMARC is still failing, the issue is alignment or SPF, not DKIM itself. For that scenario, see What is SPF Email, DKIM, and DMARC? and our SPF Failure Troubleshooting Guide.

The parenthetical hint after dkim=fail is gold. It tells you the specific failure mode. "Body hash did not verify" means something changed the message body after it was signed. "Signature syntax error" means the signature header itself is malformed. "Key not found" means DNS is the problem. Each of those maps to a different section below.

If you need help reading DKIM headers in practice, run one of your failing messages through our free DKIM Checker. It will pull the signature, look up the public key, and verify the signature the same way a real receiver does, then tell you exactly what broke.

Suggested image: screenshot of an Authentication-Results header with dkim=fail highlighted, alt text "Email header showing DKIM fail result with body hash did not verify diagnostic"


Error 1: No DKIM Signature on the Message

What it looks like: dkim=none in the Authentication-Results header, or no DKIM-Signature: header on the message at all.

Why it happens: The sending server is not signing messages. Either DKIM was never set up for this sending stream, or it was set up on one server (say, your primary mail host) but a different server (your marketing platform, your CRM, your transactional API) is sending this particular message without signing it.

This is the most common DKIM problem, and the most overlooked. It is especially common when a company signs its Google Workspace or Microsoft 365 traffic but forgets that Mailchimp, SendGrid, HubSpot, Salesforce, and whoever else are sending a significant chunk of the company's email as well.

The fix:

  1. Identify every sending stream. Pull at least two weeks of DMARC aggregate reports and make a complete inventory of who is sending on behalf of your domain. Our iO™ DMARC platform parses those reports into a readable view of every sender.

  2. Enable DKIM at the provider level for each one. Every major email platform offers DKIM in its settings. Google Workspace calls it "Email authentication," Microsoft 365 calls it "DKIM under Email authentication settings," Mailchimp calls it "Authenticate your domain," and so on. Each will give you one or more DNS records to publish.

  3. Publish the DNS records. Each provider's DKIM requires a TXT (or in some cases CNAME) record at a specific selector hostname. Publish them exactly as the provider specifies.

  4. Send a test message from each sender and inspect the headers at the receiver. You should see a DKIM-Signature:header and dkim=pass in the Authentication-Results.

How to verify: Run each sender through our DKIM Checker, or inspect headers manually. Any sender that still shows dkim=none is not signing and needs to be set up.


Error 2: Body Hash Did Not Verify

What it looks like: dkim=fail (body hash did not verify) or similar wording.

Why it happens: This one is subtle. DKIM signs a hash of the message body at send time. When a receiver verifies the signature, it computes the hash of the body as it arrives and compares. If the two hashes do not match, the signature fails. So something, somewhere between the signer and the receiver, modified the body.

Common culprits:

  • A forwarding server that appends a footer to the body (very common with mailing lists)

  • A security appliance that adds a banner like "EXTERNAL SENDER" to the top of the message

  • An antivirus or DLP gateway that inspects and rewrites attachments or URLs

  • An encoding change in transit (rare, but it happens with misconfigured relays)

  • Content filtering that modifies HTML

  • Whitespace changes between simple and relaxed canonicalization

Note that you cannot control what happens at the receiving side. If the receiver adds a banner before verification, that is their problem and their decision. But often the modification happens at an intermediate relay that you can control.

The fix, depending on cause:

  1. If a corporate email gateway is modifying messages, configure ARC. Authenticated Received Chain (ARC) preserves the original authentication results across each hop that supports it, so receivers can see that the message was authentic when it left your gateway even if it was modified afterward.

  2. If your mailing list is the problem, use List-Unsubscribe and avoid footer modifications, or accept that forwarded mail will fail DKIM and rely on DKIM passing on the original leg instead.

  3. Set DKIM canonicalization to relaxed/relaxed. This is the modern default. Relaxed canonicalization tolerates minor whitespace and header-case changes that simple canonicalization does not. If your provider exposes the setting, verify it is relaxed/relaxed, not simple/simple.

  4. If a downstream security product is rewriting URLs or attachments, sign after the rewrite. Your outbound gateway should be the last thing to modify the body, then sign, then send. Signing before modification is almost always why the body hash fails.

How to verify: Send a message to a test address that is behind a known-good receiver (Gmail is a reliable test target). Inspect headers. If it passes there but fails at a customer mailbox, the customer's mailbox is modifying content. If it fails at Gmail too, the change is happening on your side.


Error 3: Signature Syntax Error or Bad Signature

What it looks like: dkim=permerror (signature syntax error), dkim=neutral (invalid signature), or a diagnostic mentioning a specific DKIM tag that is malformed.

Why it happens: The DKIM-Signature: header itself is broken. Tags are missing, malformed, in the wrong format, or the signature block is not properly encoded. You almost never write this header by hand, so a syntax error usually points to a bug in the signing software or a misconfiguration that caused it to emit an incomplete signature.

Common specific causes:

  • Missing d= (domain) tag

  • Missing s= (selector) tag

  • Missing h= (signed headers) tag

  • Missing b= (signature data) or bh= (body hash) tag

  • Wrong algorithm identifier (a=rsa-sha1 on a receiver that rejects SHA-1)

  • Base64 encoding error in the signature data

The fix:

  1. Read the raw DKIM-Signature header. Open source view in your email client or view the raw .eml. Compare it against a known-good signature from the same provider.

  2. Check that every required tag is present. A valid signature minimally contains v=, a=, d=, s=, h=, bh=, and b=.

  3. If your signer is a mail server you control (Postfix/OpenDKIM, Exim, etc.), update it. Older versions of OpenDKIM and similar tools produced malformed signatures in edge cases. Upgrade to current.

  4. If the signer is a hosted provider, open a support ticket. Bad signatures from hosted platforms are rare but do happen, and the provider needs to fix it on their end.

How to verify: Our DKIM Checker parses the signature and tells you exactly which tag is malformed. That is usually faster than reading the raw header yourself.


Error 4: Public Key Not Found in DNS

What it looks like: dkim=permerror (key not found), dkim=temperror, or a diagnostic saying the selector record does not resolve.

Why it happens: The DKIM-Signature: header points to a specific DNS location for the public key, and that location does not exist or does not return a valid key. The format of the lookup is:

<selector>._domainkey.<domain>

So a signature with s=selector1; d=yourdomain.com triggers a DNS lookup of selector1._domainkey.yourdomain.com. If that record is missing, or is not a proper TXT record, or contains the wrong value, the verification fails.

The fix:

  1. Query the expected record directly.

    dig TXT selector1._domainkey.yourdomain.com +short
    

    You should get back a string starting with v=DKIM1; k=rsa; p=... and the Base64 public key.

  2. If it returns nothing, publish the record. Your email provider's DKIM setup wizard shows you the exact host and value to publish. Copy them precisely. One missing character breaks verification.

  3. If it returns the wrong value, republish. Compare against what the provider currently tells you the record should be. Providers occasionally rotate keys, and stale values will cause key-not-found or signature-mismatch errors.

  4. Watch the host field. Most DNS providers want selector1._domainkey in the host field, and they append the apex domain automatically. Some providers want the full hostname. Look at the confirmation screen before saving to be sure you published to the right place.

How to verify: After publishing, wait for DNS propagation (usually under an hour, up to 24 depending on TTL), then re-query. Our DKIM Checker also does the lookup and reports which records it found, which is easier than remembering dig syntax.


Error 5: Wrong Selector in the Signature

What it looks like: The signature verifies as dkim=fail with a diagnostic that the key retrieved does not match the signature, or dkim=permerror with "no key for signature."

Why it happens: The selector is the label that tells receivers which public key to use. A sender can have multiple DKIM keys (for different sending streams, for key rotation, for different algorithms), and the selector in the DKIM-Signature: s= tag tells receivers which one to look up.

When the signing server is configured to use a selector that either does not exist in DNS or does not have the correct key published, you get this failure.

The fix:

  1. Align the signer configuration and DNS. The s= value your mail server puts in signatures must match a published <selector>._domainkey.<domain> record. Pick a selector name (something short like sel1 or marchmail2026), configure your signing server to use it, publish the matching DNS record, and only then start signing with it.

  2. Use date-based or service-based selectors for organization. A common pattern is mailchimp._domainkey.yourdomain.com for Mailchimp, google._domainkey.yourdomain.com for Google Workspace, and so on. This makes key rotation and auditing much easier.

  3. Never publish keys under a selector you are not signing with, and never sign with a selector whose key is not published. Keep them in lockstep.

How to verify: Inspect the s= tag in the DKIM-Signature header of a sent message. Then run a DNS query for <that-s-value>._domainkey.<your-domain>. You should get the matching public key. If not, one side of the setup is wrong.


Error 6: Key Too Short or Weak Algorithm

What it looks like: dkim=policy, dkim=neutral, or dkim=fail with a diagnostic about "weak key" or "insufficient key strength."

Why it happens: RFC 8301 updated DKIM to require a minimum of 1024-bit RSA, but modern deployments should use 2048-bit keys with SHA-256. Gmail and other major receivers now reject or flag signatures with 1024-bit keys as weak, and SHA-1 is deprecated entirely.

If your DKIM setup was configured years ago and never updated, you are probably running a 1024-bit SHA-1 key. That is a latent time bomb that will eventually cause deliverability problems.

The fix:

  1. Generate a new 2048-bit RSA key pair with SHA-256. Most hosted providers give you the option in their DKIM setup. On a self-hosted signer like OpenDKIM, run:

    openssl genrsa -out dkim-private.key 2048openssl rsa -in dkim-private.key -pubout -out dkim-public.key
    
  2. Publish the new public key under a new selector in DNS. Do not overwrite the existing selector yet. This is critical for a zero-downtime rotation.

  3. Reconfigure your signer to sign with the new selector. Validate with test messages that new signatures verify correctly.

  4. Leave the old selector in DNS for at least 7 days so any mail already in transit or cached at intermediate relays can still verify.

  5. Then remove the old selector once you are confident no in-flight messages still reference it.

How to verify: Inspect the a= tag in a new signature. It should read a=rsa-sha256. The published key length can be checked by decoding the p= value (Base64) and running it through OpenSSL, or by running the key through our DKIM Checker, which reports the key length directly.


Error 7: Key Rotation Gone Wrong

What it looks like: Mail that was passing DKIM yesterday is suddenly failing. Or the opposite: you rotated keys and now both old and new signatures fail.

Why it happens: Rotating DKIM keys requires coordination between the signer (your mail server) and the verifier (receivers pulling the public key from DNS). If you update DNS but your signer is still using the old private key, signatures reference an old public key that no longer exists. If you update the signer first and DNS has not caught up, receivers cannot find the new public key yet.

Rotation is also where you discover, sometimes painfully, that a receiver has cached the old public key under its old TTL and is still using it for verification even after you published the new one.

The fix, the safe rotation pattern:

  1. Generate the new key pair offline.

  2. Publish the new public key under a new selector (do not overwrite the old one). Both selectors coexist in DNS temporarily.

  3. Configure the signer to start using the new private key with the new selector.

  4. Verify with test messages. All new mail should verify against the new selector.

  5. Wait at least 7 days so mail cached in transit is fully flushed.

  6. Remove the old selector from DNS.

That sequence, new selector first, cutover in signer second, old selector removed last, prevents every common rotation bug. The mistake most people make is trying to update the same selector in place, which creates an unavoidable gap where either old or new signatures cannot verify.

How to verify: Run the DKIM Checker before and after each step in the rotation. Both old and new selectors should resolve correctly during the overlap period. Only after you are fully cut over should the old selector be removed.


Error 8: Forwarding and Mailing Lists Break the Signature

What it looks like: DKIM passes on the original leg (sender to first receiver) but fails on any onward hop. Or DKIM fails at the final receiver but the headers show the message went through a mailing list or forwarding service first.

Why it happens: Any intermediate server that modifies the message body (adding a footer, changing encoding, rewriting URLs) invalidates the DKIM signature, because the body hash no longer matches. Mailing lists are almost universally guilty of this. They append unsubscribe footers, rewrite Reply-To headers, and sometimes modify the subject.

Forwarding services vary. Some preserve the original message byte-for-byte (DKIM survives). Others modify it (DKIM breaks).

The fix:

  1. Implement ARC (Authenticated Received Chain) on your gateway if it acts as a forwarder. ARC captures the authentication results at the point of receipt and attests to them for downstream receivers. Major providers support it. It does not make broken DKIM valid again, but it gives the next hop enough information to make a trust decision.

  2. On sending side, rely on SPF alignment as well as DKIM. DMARC only requires one of the two to align. If SPF passes and aligns after a forward (via SRS), DMARC still passes even when DKIM breaks.

  3. For mailing lists you operate, consider not modifying the body. Some modern list software (Mailman 3, Discourse) supports non-modifying forwarding modes.

  4. For mailing lists you cannot control, accept that DKIM will break on forward and ensure your DMARC policy does not hard-reject legitimate subscribers. Start with p=quarantine and tune from there.

For the full picture on how SPF and DKIM both feed into DMARC alignment, see What is SPF Email, DKIM, and DMARC?.


Error 9: Multiple or Conflicting Signatures

What it looks like: Some signatures pass, others fail, all on the same message. Or the receiver reports that multiple signatures were found and the results are mixed.

Why it happens: A message can legitimately carry multiple DKIM signatures (for example, your mail server signs with your domain and your outbound gateway signs with its own domain). That is fine. The problem is when a signing chain is misconfigured and one signer modifies the body after another signer already signed it. The second signer's signature is valid; the first is not.

Another flavor: your email provider and your own signing server are both adding signatures for the same domain, with different selectors, and one of them is wrong.

The fix:

  1. Audit every step of your outbound pipeline. Diagram each hop from message creation to final SMTP handoff. Identify every component that signs.

  2. Sign exactly once per domain, at the last hop before handoff to receivers. Additional signatures for other domains (gateway attestations, forwarding chain signatures) are fine as long as each signer only signs what it actually attests to.

  3. Turn off duplicate signing. If both your mail server and your outbound gateway are signing with the same d=yourdomain.com, pick one and disable the other.

How to verify: Inspect a sent message's raw headers. Count the DKIM-Signature: headers and the d= values on each. One per domain is right. Two with the same d= is a misconfiguration.


Error 10: Signature Expired

What it looks like: dkim=fail (signature expired) or similar wording.

Why it happens: DKIM signatures can optionally include an x= tag specifying an expiration time. If the message is verified after that time, even a cryptographically valid signature is rejected.

This is an intentional design choice for some high-security use cases, but it causes problems when messages sit in queues, get delayed, or are forwarded long after they were sent. It is also a misconfiguration when a signer is set to emit short-lived signatures (say, one day) for general business mail.

The fix:

  1. Remove the x= tag from your signer configuration unless you have a specific reason to use it. The default should be no expiration (or an expiration measured in months, not hours).

  2. If you must use x=, set a reasonable window. 7 days is a common safe choice. Anything under 24 hours will cause legitimate problems with delayed mail.

  3. For messages that truly need short-lived authenticity, lean on time-of-receipt enforcement at the receiverrather than DKIM expiration.

How to verify: Inspect the DKIM-Signature: header. If you see an x= tag, compare its value against the message's receipt time. If the window is too tight, extend it.


Error 11: DKIM Passes but DMARC Still Fails

What it looks like: Authentication-Results shows dkim=pass but the DMARC result is still fail, and the message is being quarantined or rejected.

Why it happens: DMARC does not just care that DKIM passes. It requires DKIM alignment, which means the d= domain in the signature must match (or share an organizational domain with) the From: header domain. A DKIM signature from d=mailchimp.com does not help when the From: header is you@yourdomain.com, because DKIM is not aligned with the From.

This is a common surprise for senders who publish DKIM through a third-party provider without also publishing their own branded DKIM.

The fix:

  1. Publish a domain-aligned DKIM key at your own sending domain. For Mailchimp, for example, you enable "Authenticate your domain" and Mailchimp gives you CNAME records to publish under your domain. The resulting signature uses d=yourdomain.com, not d=mailchimp.com. That aligns with From: you@yourdomain.com.

  2. Verify alignment with DMARC reports. Our iO™ DMARC platform shows alignment pass/fail for every sender, not just the raw DKIM result.

  3. Do not rely solely on a third party's default signing. It may pass DKIM but fail DMARC alignment, which is the outcome that actually affects deliverability.

How to verify: In the message headers, the d= value in the DKIM-Signature should match the right-hand side of your From: address, or should share its organizational domain.


Error 12: DNS TXT Record Split-String Issues

What it looks like: DKIM public key lookups appear to succeed (the DNS record exists), but signature verification fails with "key parse error," "invalid public key," or a similar diagnostic.

Why it happens: DNS TXT records have a hard 255-character limit per string. A 2048-bit RSA public key in Base64 is around 400 characters, which exceeds that limit. The correct behavior is to split the record across multiple strings in the same TXT record, like:

"v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA..." "...rest of the key..."

When the receiver queries the record, all strings get concatenated and the key parses correctly.

Problems happen when:

  • The DNS provider's UI silently truncates at 255 characters

  • The provider concatenates strings incorrectly, with extra whitespace or commas between them

  • The provider does not support multi-string TXT records at all

  • Someone tries to manually split the key and adds spaces or line breaks

The fix:

  1. Let your DNS provider handle the split automatically. Most modern providers (Cloudflare, Route 53, GoDaddy, Namecheap) accept the full key as one long string and split it correctly on the wire.

  2. If you must split manually, split between quoted strings with exactly one space between them, like the example above. No extra quotes, no commas, no line breaks.

  3. Verify the result with a dig query from an external resolver.

    dig TXT selector1._domainkey.yourdomain.com +short
    

    The output should show the key correctly, with any split strings already concatenated.

How to verify: Run the selector through our DKIM Checker. It retrieves the key the same way a real verifier does and flags any split-string issue.


Final Validation Checklist

Work through the list. If every box checks, your DKIM is in good shape.

  • [ ] Every sending stream (primary mail, marketing, transactional, CRM) emits a DKIM-Signature: header

  • [ ] The d= domain in every signature aligns with the From: header domain, so DMARC alignment passes

  • [ ] Public keys are published at <selector>._domainkey.<domain> for every selector you sign with

  • [ ] Keys are 2048-bit RSA with SHA-256 (a=rsa-sha256)

  • [ ] Canonicalization is relaxed/relaxed (not simple/simple)

  • [ ] No signatures carry a short x= expiration window

  • [ ] DNS TXT records for long keys split correctly and parse as valid keys when queried

  • [ ] Key rotations follow the overlap pattern (publish new, cut over, wait, remove old)

  • [ ] Gateway and mailing list scenarios are covered with ARC or validated through DKIM + SPF alignment via DMARC

  • [ ] DMARC aggregate reports are being collected and reviewed regularly

If you want that entire posture audited in one pass (SPF, DKIM, DMARC, alignment, reputation, and more), our Email Audit service delivers a full report with prioritized fixes.


Frequently Asked Questions

1. Why is my DKIM signature failing even though I set it up correctly? The most common reasons are a body modification in transit (forwarding, mailing lists, or a gateway adding banners), a missing or mis-selectored public key in DNS, or a DKIM pass that is not aligned with the From: domain so DMARC still fails. Walk through Errors 2, 4, and 11 in this guide first.

2. What is the difference between DKIM fail, neutral, and none? fail means a signature was present and did not verify. neutral means a signature was present but the result is inconclusive (often due to a policy tag or weak key). none means no signature was on the message at all. Each points to a different fix.

3. How long does a DKIM DNS change take to propagate? Usually under an hour, up to 24 to 48 hours depending on your record's TTL. Lower your TTL to 300 seconds before making changes and raise it back afterwards to minimize propagation windows.

4. Can I have multiple DKIM signatures on one message? Yes. Multiple signatures from different domains are legitimate and common (your mail server signs, and your outbound gateway may add its own signature). What you should avoid is multiple signatures from the same domain with conflicting selectors or configurations.

5. Is 1024-bit DKIM still allowed? Technically yes, per RFC 8301, but major receivers including Google flag 1024-bit keys as weak and some now reject them. Move to 2048-bit RSA with SHA-256 as soon as you can.

6. Do I need to rotate DKIM keys periodically? Yes, as a security best practice. A common cadence is every 6 to 12 months, using the overlap rotation pattern described in Error 7. Some compliance frameworks require specific rotation schedules.

7. Does DKIM protect me from spoofing on its own? No. DKIM proves that a message was signed by the holder of a specific private key, but a spoofer can simply not sign (DKIM=none). You need DMARC with a policy of quarantine or reject to actually block messages that do not pass DKIM or SPF alignment.

8. What happens if a forwarder breaks my DKIM signature? DKIM on the forwarded leg fails, but DMARC alignment can still pass via SPF (if SRS is in place) or the original DKIM if the body was not modified. This is why DMARC requires only one of SPF or DKIM to align, not both.


Still Stuck?

DKIM is the kind of technology where 90 percent of cases are covered by the checklist above, and the other 10 percent need a real person to look at the full picture. If you have worked through this guide and something still is not adding up, the most efficient next steps are:

  1. Run a failing message's domain through our DKIM Checker for an instant view of what the receiver sees.

  2. Start ingesting DMARC aggregate reports with iO™ DMARC to see which senders are failing alignment and why.

  3. If you want a full audit of your SPF, DKIM, DMARC, and BIMI posture together, reach out to us at 844-InputOut (467-8868) or through inputoutput.com. Our Email Audit service turns the entire authentication picture into a prioritized action plan.

Get DKIM right. Keep it rotated. Pair it with SPF and DMARC. Your email does the rest.

BE BETTER. BE iO.™

James Bowers II

James Bowers II

Chief Security & Compliance Architect

James Bowers II is the founder of Input Output, where he helps businesses make sense of cybersecurity, compliance, and information security without drowning in jargon or generic advice. With a focus on practical security policies, risk assessments, audits, penetration testing, and vCISO support, James works with organizations to build stronger, smarter security programs that protect the business and satisfy real-world compliance requirements.