我正在使用 PHPMailer 发送邮件,并喜欢在邮件中附加 DKIM 签名。我在应用 this patch 之前遇到了问题。现在我可以向 isnotspam.com 发送成功签名的消息。
我已成功签署正文少于 1500 个字符的消息。如果增加字符数(即使是简单的 a),签名也会失败。
我已经正确设置了 TXT 域记录。
我想这是因为电子邮件的正文原因,如果我使用 this service,我总是会收到“错误的正文哈希”错误。
电子邮件标题中的签名如下所示:
DKIM-Signature: v=1; a=rsa-sha1; q=dns/txt; l=641; s=mymail;
t=1354285494; c=relaxed/simple;
h=From:To:Subject;
d=revaxarts.com;
z=From:=20"WP=203.4"=20<[email protected]>
|To:[email protected]
|Subject:=20DKIM=20Test;
bh=Sx1Rj3c65v2Hk0fmg2j5XNIDi14=;
b=n4OGAwl3i[...]AOkfUglp6iiYZ6B2M3ZKlGW5gDfE=
最佳答案
我在这里遇到了与 Perl 脚本和错误正文哈希相同的问题。
我使用 \n
作为换行符(标题行的示例结束)。
但是你必须使用 \r\n
。这为我解决了!
编辑:
感谢 ArtemGr 对以下信息的评论和网址(从 http://permalink.gmane.org/gmane.mail.postfix.user/223780 复制以防止链接腐烂):
损坏的一个可能原因是发送应用程序生成
在某些方面与 RFC 5322 或 RFC 5321 不兼容的电子邮件。
Postfix SMTP 客户端保持行长低于 SMTP
协议(protocol)限制为 1000 字节,包括 .由于这个变化
签名后发生,它肯定会破坏 DKIM 签名。
为避免长线中断问题,请以引用可打印的格式发送邮件
或 base64 编码,最多 80 个字符的行。
SMTP 需要行尾,并且不允许或
任何其他上下文中的字符。
Postfix sendmail 命令需要 UNIX 风格的
<LF>
[line-feed] 行结尾。它还将接受以
<CR><LF>
[carriage-return line-feed] 结尾的行,但您不能使用在同一消息中混合行结束样式。
等等。如果您想确保 DKIM 签名继续存在,您
需要发送符合 RFC 5322 或 RFC 5321 协议(protocol)规范的电子邮件;
关于phpmailer - DKIM 验证中的正文已更改失败,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13649129/