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

nmf*_*ord 5 php email 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
Run Code Online (Sandbox Code Playgroud)

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

感谢您的帮助,我拼命地努力使它正常工作,并且现在已经将我的头撞在墙上好几个小时了。

Nep*_*luz 4

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

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

查看签名失败(并给出消息已更改错误)的消息源,以确定添加了哪些标头。通常,您的 MTA 将添加Message-IDDate标头(如果缺少 Date 标头,也可能会导致垃圾邮件刺客分数较低,因此您也可以将其包含在内!)。

另一个常见的错误是您在签署消息后自行更改消息,因此请确保在签署消息后不会对代码进行任何修改。

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