使用PHP发送邮件时,DKIM签名无法验证

时间:2012-07-30 18:54:52

标签: email php dkim

我的gmail / hotmail过滤来自我服务器的垃圾邮件问题。垃圾邮件刺客分数很低,所以我知道我的IP不在任何黑名单上,或者这意味着它是gmail / hotmail用来阻止电子邮件通过的过滤。

我做了一些研究并读到使用DKIM可能会解决我遇到的问题。我继续在我的服务器上启用DKIM。现在,当我使用我的电子邮件客户端发送电子邮件时,位于此处的工具(http://www.brandonchecketts.com/emailtest.php)会将DKIM签名报告为有效。

下一步是在我的PHP邮件中实现DKIM签名。所以我继续使用这个位于此处的DKIM类( http://sourceforge.net/projects/dkim-class-php/ ),这是PHPMailer的衍生产品。

但是,当我现在发送电子邮件时,尽管包含DKIM签名,但我从验证工具中收到了一个奇怪的错误。

result = fail
Details: message has been altered

您可以在此处查看完整报告:http://www.brandonchecketts.com/emailtest.php?email=K86KTXpMbl%40www.brandonchecketts.com

感谢您的帮助,我拼命想让这个工作起来,并且已经把我的头撞在墙上好几个小时了。

2 个答案:

答案 0 :(得分:3)

我在这里给出了答案:Setting up DomainKeys/DKIM in a PHP-based SMTP client

您需要确保的是,您需要提供MTA添加到您外发电子邮件中的所有标头。由于不同的系统配置不同,因此没有一种尺寸适合所有解决方案。

查看签名失败的消息来源(并提供 消息已更改 错误)以确定添加了哪些标头。通常,您的MTA会添加 消息ID 日期 标头(日期标头也可能会导致垃圾邮件不足assasin得分,如果它丢失,所以你也可以包括它!)。

另一个常见错误是您在签署邮件后自己更改了邮件,因此请确保在您签署邮件后未对代码进行任何修改。

在确定添加了哪些标题后,您应该在签名之前自己添加这些标题(因此将MTA的默认行为覆盖它们)添加到电子邮件中。

答案 1 :(得分:0)

我发现php mail()+ postfix与dkim的奇怪行为:

如果你做

$headers .= "From: USER <$from_email>\n";

DKIM不正确,但如果你这样做:

$headers .= "From: USER <" . $from_email . ">\n";

一切都好! 奇怪。很奇怪。也建议用户使用

trim($emailContent)