我正在使用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的评论和url以下信息(从http://permalink.gmane.org/gmane.mail.postfix.user/223780复制,以防止链接腐烂):
可能导致破坏的原因是发送应用程序在某些方面生成与RFC 5322或RFC 5321不兼容的电子邮件。
<LF>
[换行]行结尾。它还将接受以<CR><LF>
[carriage-return line-feed]结尾的行,但不能在同一消息中使用混合行结束样式。等等。如果要确保DKIM签名存在,则需要发送符合RFC 5322或RFC 5321协议规范的电子邮件;
我的案例是unicode撇号和连字符。在用ascii替换它们之后,传递DKIM验证。