DKIM 仅适用于短消息
DKIM Only works on Short Messages
问题:
我正在使用带有 Postfix 的 OpenDKIM。使用以下代码在 PHP 中生成邮件,然后使用 mail()
:
发送
// message
$message = "--$hash".PHP_EOL;
$message .= "Content-Type: text/plain; charset=\"iso-8859-1\"".PHP_EOL;
$message .= "Content-Transfer-Encoding: base64".PHP_EOL.PHP_EOL;
$message .= base64_encode($body).PHP_EOL.PHP_EOL;
$message .= "--$hash".PHP_EOL;
OpenDKIM 适用于长度小于 742 个字符的任何消息,但如果消息长度为 742 个字符或更多,Google 报告 DKIM“body hash did not verify
”。
查看 DKIM 和 Google,我找不到任何关于导致此问题的信息。我已经尝试了多条 741 个字符的消息(全部通过)和多条 742 个字符的消息(全部失败)。
错误:
唯一的错误是 Google 收到电子邮件(它说无法验证):
dkim=neutral (body hash did not verify) header.i=@mailer.example.com;
/var/log/maillog
在成功和不成功的电子邮件中有以下内容(或类似内容):
Nov 5 00:58:57 ip-XX-XX-XX-XX opendkim[3953]: 7D2946081A: DKIM-Signature field added (s=default, d=mailer.example.com)
解法:
根据下面@Adrien Lebner 的解决方案,这是对
的简单更改
base64_encode($body)
到
chunk_split(base64_encode($body), 76, PHP_EOL)
解决了问题。
如果您在多条线路上发送相同的内容怎么办?
如果行太长,DKIM 可能会中断:
2.1.1. Line Length Limits
There are two limits that this specification places on the number
of characters in a line. Each line of characters MUST be no more
than 998 characters, and SHOULD be no more than 78 characters,
excluding the CRLF.
问题:
我正在使用带有 Postfix 的 OpenDKIM。使用以下代码在 PHP 中生成邮件,然后使用 mail()
:
// message
$message = "--$hash".PHP_EOL;
$message .= "Content-Type: text/plain; charset=\"iso-8859-1\"".PHP_EOL;
$message .= "Content-Transfer-Encoding: base64".PHP_EOL.PHP_EOL;
$message .= base64_encode($body).PHP_EOL.PHP_EOL;
$message .= "--$hash".PHP_EOL;
OpenDKIM 适用于长度小于 742 个字符的任何消息,但如果消息长度为 742 个字符或更多,Google 报告 DKIM“body hash did not verify
”。
查看 DKIM 和 Google,我找不到任何关于导致此问题的信息。我已经尝试了多条 741 个字符的消息(全部通过)和多条 742 个字符的消息(全部失败)。
错误:
唯一的错误是 Google 收到电子邮件(它说无法验证):
dkim=neutral (body hash did not verify) header.i=@mailer.example.com;
/var/log/maillog
在成功和不成功的电子邮件中有以下内容(或类似内容):
Nov 5 00:58:57 ip-XX-XX-XX-XX opendkim[3953]: 7D2946081A: DKIM-Signature field added (s=default, d=mailer.example.com)
解法:
根据下面@Adrien Lebner 的解决方案,这是对
的简单更改base64_encode($body)
到
chunk_split(base64_encode($body), 76, PHP_EOL)
解决了问题。
如果您在多条线路上发送相同的内容怎么办?
如果行太长,DKIM 可能会中断:
2.1.1. Line Length Limits
There are two limits that this specification places on the number of characters in a line. Each line of characters MUST be no more than 998 characters, and SHOULD be no more than 78 characters, excluding the CRLF.