问题:
我正在使用OpenDKIM和Postfix。邮件使用以下代码在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)
解决了这个问题。
答案 0 :(得分:1)
如果您在多行上发送相同的内容怎么办?
如果行长太长,DKIM可能会中断:
2.1.1。线长限制
此规范对数字有两个限制 一行中的字符。每一行字符都必须不再存在 超过998个字符,且不应超过78个字符, 不包括CRLF。