タイトルの件、そのまま。
自分の場合、
mailutilsのメールコマンドで、メール送信時に
Fromヘッダーを付けなくても、デフォルトの送信者名を付与するため
header_checks内でFromを以下のように変更していた。
/^From: {{ postfix_admin_mail_from }} (.*?)/ REPLACE From: {{ postfix_admin_mail_from }} ({{ postfix_admin_name }})
これが原因で、DKIM認証が失敗していた。
以下のページをより引用
Postfix opendkim and missing From header | Skull's blog
The presence of a “From” or “Sender” header within the email is mandatory for DKIM, otherwise the mail can’t be signed
つまりDKIMが電子署名作成するには、Fromヘッダが必要だが
DKIMの処理の流れが、以下なので
1. 送信者が送信メールのヘッダ+本文でハッシュ作成
2. ハッシュ + 秘密鍵で電子署名作成
3. 電子署名をDKIM-Signatureヘッダとして添付
4. メール送信
5. 受信者が受信メールのヘッダ+本文でハッシュ作成
6. DKIM-Signatureヘッダの電子署名から公開鍵でハッシュを復号
7. 受信者が作成したハッシュと比較する
Postfix + OpenDKIMで送信元ドメイン認証を実装するメモより引用
恐らく、header_checksがFromを書き換えるのは
2の後の「電子署名作成後」に、行われるためDKIMが失敗するものと勝手に納得した。
(※個人的見解なので、詳しい方がいらっしゃればコメントお願いします)
要は、header_checks自体を使用するのは構わないが
DKIM認証を使用する場合、Fromヘッダーを変更するのは辞めたほうがよいということ。
素直に、Fromヘッダーはメール送信時に設定すればよいという結論。
以下、mailutilsでのFromヘッダ付加例)
$ echo Dkim Test | mail -s "Test" -aFrom:'Admin <hoge@example.com>' to@example.com
[他参考]
DomainKeys Identified Mail (DKIM) and Postfix Header Checks | Gaia Environmental Sciences