问题:
我正在使用Postfix和OpenDKIM。邮件是使用以下代码在PHP中生成,然后使用
解决了问题。
我正在使用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个字符,谷歌会报告DKIM“body hash did not verify
”。
在研究DKIM和Google时,我没有找到任何有关这种情况的信息。我尝试了多个长度为741个字符的消息(全部通过),以及多个长度为742个字符的消息(全部失败)。
错误:
唯一的错误出现在谷歌收到邮件时(它说无法验证):
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)
to
chunk_split(base64_encode($body), 76, PHP_EOL)
解决了问题。
mail._domainkey
TXT DNS 区域的内容吗?(在你的答案中编辑附加信息会更清晰) - JazZ