【问题标题】:DKIM Only works on Short MessagesDKIM 仅适用于短消息
【发布时间】:2017-03-18 21:36:03
【问题描述】:

问题:

我正在使用带有 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 个字符的消息(全部失败)。


错误:

唯一的错误是谷歌收到的电子邮件(它说它无法验证):

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)

解决了这个问题。

【问题讨论】:

  • 任何错误信息?
  • 可以添加mail._domainkeyTXT DNS zone的内容吗? (使用附加信息编辑您的答案会更简洁)
  • @AdrienLeber 添加和组织。
  • 也可以发完整的邮件吗?
  • 你的邮件客户端是什么?你试过另一个吗?

标签: php dkim postfix


【解决方案1】:

如果您在多行上发送相同的内容怎么办?

如果行长过长,DKIM 可能会中断:

2.1.1。行长限制

本规范对数字有两个限制 一行中的字符数。每行字符必须不再 超过 998 个字符,并且应该不超过 78 个字符, 不包括 CRLF。

【讨论】:

  • 这几乎可以肯定。电子邮件以 base64 编码,因此作为一行发送。谢谢!
猜你喜欢
  • 2011-12-09
  • 2021-08-21
  • 2016-01-27
  • 1970-01-01
  • 1970-01-01
  • 2015-04-05
  • 1970-01-01
  • 2019-06-12
  • 1970-01-01
相关资源
最近更新 更多