在DKIM验证中身体被改变失败

时间:2012-11-30 16:27:00

标签: phpmailer dkim

我正在使用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<info@rvaxarts.com>
    |To:=test@rvaxarts.com
    |Subject:=20DKIM=20Test;
    bh=Sx1Rj3c65v2Hk0fmg2j5XNIDi14=;
    b=n4OGAwl3i[...]AOkfUglp6iiYZ6B2M3ZKlGW5gDfE=

2 个答案:

答案 0 :(得分:3)

我在这里遇到了与Perl脚本和错误的主体哈希相同的问题。

我使用\n作为换行符(标题行的示例结尾)。 但是你必须使用\r\n。这为我解决了!

修改 感谢ArtemGr的评论和url以下信息(从http://permalink.gmane.org/gmane.mail.postfix.user/223780复制以防止链接腐烂):

可能导致破损的原因是发送应用程序生成 在某些方面,与RFC 5322或RFC 5321不兼容的电子邮件。

  • 超过990的行。

    Postfix SMTP客户端将行长度保持在SMTP之下 协议限制为1000字节,包括。自此改变 签约后发生,肯定会打破DKIM签名。

    为避免长线存在问题,请使用quoted-printable发送邮件 或base64编码,行长度最多为80个字符。

  • 格式错误的行结尾。

    SMTP需要行结尾,并且不允许或  任何其他语境中的字符。

    Postfix sendmail命令需要UNIX样式的<LF> [换行]行结尾。 它也会接受以<CR><LF> [回车换行]结尾的行,但你不能使用 混合行结束样式在同一条消息中。

等等。如果您想确保DKIM签名存活,那么您 需要发送符合RFC 5322或RFC 5321协议规范的电子邮件;

答案 1 :(得分:0)

我的情况是unicode撇号和hypen字符。用ascii替换它们后,将通过DKIM验证。