dkim=fail — 署名は付いているが、検証に失敗している
最終更新: 2026-09-09
dkim=fail は「署名は付いているが、照合が合わなかった」という意味です。署名そのものが無い dkim=none とは別物で、設定は済んでいるのに通っていない状態です。
このページでわかること
- 原因の多くは設定ミスではなく、途中でメールが書き換えられたことだと分かる
bodyhash did not verifyとsignature did not verifyの意味の違い- 自社が直せるものと、直せないものの区別
どこに出る文字列か
Authentication-Results: mx.google.com;
dkim=fail (bodyhash did not verify) header.i=@yourdomain.com header.s=selector1
括弧の中が重要です。ここで原因が半分決まります。
| 括弧の中 | 意味 | 主な原因 |
|---|---|---|
bodyhash did not verify | 本文が変わった | 転送、メーリングリスト、フッターの自動付与 |
signature did not verify | ヘッダーか鍵が合わない | 鍵の入れ替え、署名対象ヘッダーの書き換え |
no key for signature | 公開鍵が引けない | DNSの登録ミス、鍵の削除 |
bodyhash did not verify — 本文が書き換えられている
これは、多くの場合あなたの設定ミスではありません。署名は本文全体のハッシュを含むので、1文字でも足されれば合わなくなります。
- メーリングリスト … 件名に
[ml]を足す、末尾に配信解除の案内を付ける - 転送サービス … 転送元がフッターや広告を挿入する
- セキュリティ製品 … 「外部からのメールです」という注意書きを本文の先頭に足す
相手側で起きている書き換えは、こちらでは止められません。DMARCはSPFかDKIMの一方が通れば合格するので、SPFが通る経路であればDMARCは維持できます。転送の扱いは転送・ML・ARC対策にまとめています。
📌 自社側でできる対策として、
l=(本文長の制限)は使わないでください。本文の一部だけを署名する指定で、これを使うと署名の後ろに文章を継ぎ足されてもDKIMは通ってしまいます(→DKIM徹底解説)。signature did not verify — 鍵かヘッダーが合わない
- 鍵を入れ替えた直後 … 古い鍵で署名されたメールが、新しい公開鍵で検証されている状態です。DNSが行き渡るまでの過渡期に起こります。鍵の入れ替えは、セレクタを変えて行ってください(→DKIM鍵ローテーション)
- 署名対象ヘッダーが途中で変わった …
h=に含まれるヘッダー(From・Subject など)が経路で書き換えられています
no key for signature — 公開鍵が引けない
これは自社のDNSの問題なので、直せます。
# ヘッダーの s= がセレクタ。それを使って引く
dig +short TXT selector1._domainkey.yourdomain.com
- 何も返らない … ホスト名の綴りを確認してください。
_domainkeyのアンダースコアを省いていないか、ドメイン名を二重に書いていないか p=が空 … その鍵は意図的に無効化されています。消し忘れとは限りません- 値が途中で切れている … 2048ビットの鍵はDNSの255文字制限を超えるため分割が必要です。手で貼るときに改行や空白が混ざると壊れます
確認のしかた
無料診断の「完全判定」に、届いたメールのヘッダーを丸ごと貼り付けてください。s= と d= を自動で読み取って、公開鍵が引けるかまで確認します。セレクタが分からなくても判定できます。