У меня работает postfix и opendkim. postfix общается с opendkim через сокеты unix. Все это работает до тех пор, пока я не добавляю какие-то специальные поля заголовка письма в список полей, которые должен подписывать opendkim.
конфигурация постфикса:
main.cf:
...
smtpd_milters = unix:/var/spool/postfix/milter/opendkim
non_smtpd_milters = unix:/var/spool/postfix/milter/opendkim
...
В моем opendkim.conf есть такая запись:
...
AlwaysSignHeaders To,Subject,MIME-Version,Content-Type,Sender,From,Message-Id,Date,Reply-To,List-Unsubscribe
...
Если я отправлю электронное письмо с такой командой postfix sendmail
sendmail -f myenvelopefrom@mydomain.com -i -t <<EOF
From: me@mydomain.com
Sender: postmaster@mydomain.com
To: testaccount@gmail.com
Subject: Test
Test
EOF
Gmail сообщит мне:
dkim=hardfail
Используя
Diagnostics true
запись в opendkim.conf показала через запись заголовка отладочной почты "z = ...", что opendkim не включил поля "Message-Id" и "Sender" в подпись, но сообщил о включении с
h=From:To:Subject:Date:MIME-Version:Content-Type:Sender:Reply-To:List-Unsubscribe;
запись в заголовке письма.
Вникнув в это, я обнаружил, что когда я удаляю поля Message-Id и Sender из записи «AlwaysSignHeaders» в opendkim.conf, Gmail снова счастлив.
Поскольку я отправляю почту с помощью команды sendmail, я могу быть уверен, что по крайней мере поле «Отправитель:» должно быть доступно для postfix и opendkim с самого начала.
Итак, если opendkim будет использовать все поля заголовка, которые он получает, это означает, что postfix не предоставляет opendkim все поля заголовка. Я попытался проверить это, включив подробное ведение журнала для процессов «очистки» и «тривиальной перезаписи» постфикса, но должен признать, что не вижу ничего полезного в журналах, особенно я не могу извлечь информацию какие поля заголовка почты postfix предоставляет opendkim. Если кто-то может использовать это, я могу разместить эти журналы здесь ...
У меня заканчиваются идеи, поэтому я надеюсь, что кто-нибудь может дать мне несколько полезных советов ...
Я выяснил причину (с помощью добрых ребят из списка рассылки opendkim):
В моем файле opendkim.conf у меня было только поле
AlwaysSignHeaders From,Sender,To,CC,Subject,Message-Id,Date
указано. Оказалось, что нужно добавить и поле SignHeaders, теперь конфиг выглядит так:
...
SignHeaders From,Sender,To,CC,Subject,Message-Id,Date
AlwaysSignHeaders From,Sender,To,CC,Subject,Message-Id,Date
...
Это оно.
Редактировать:
Ребята из opendkim отметили, что AlwaysSignHeaders устарела, Заголовки следует использовать вместо этого.
Вы пробовали подписать тестовое сообщение с помощью обе Заголовки Message-ID: и Sender: присутствуют?
Ваша проблема может быть вызвана тем, что milter получает версию сообщения перед posstfix / MTA добавил вышеупомянутые заголовки (я уверен, что любой хороший MTA исправляет отсутствующий заголовок Message-Id:).
http://www.elandsys.com/resources/sendmail/dkim.html : DKIM использует заголовки и текст сообщения электронной почты для создания подписи. Если заголовки переписываются или текст добавляется к телу сообщения после его подписания, проверка dkim не выполняется.
P.S. IMHO opendkim должен предоставить возможность генерировать отсутствующий идентификатор сообщения:
Добавлено для будущих читателей: OpenDKIM предоставляет возможности для отладки проблем с измененными заголовками: KeepTemporaryFiles
и TemporaryDirectory