2012-07-30 87 views
4

我的Gmail/Hotmail邮件从我的服务器过滤垃圾邮件时遇到问题。垃圾邮件刺客分数相当低,所以我知道我的IP不在任何黑名单上,或者这意味着它是gmail/hotmail使用阻止电子邮件通过的过滤。使用PHP发送邮件时DKIM签名不验证

我做了一些研究,并读到使用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

感谢您的帮助,我拼命地得到这个工作,现在已经被敲我的头几个小时墙上。

+1

你似乎在签署from和主题标题(加上正文)。你应该检查你和测试程序之间的邮件服务器是否改变这些标题或正文内容。问题也可能是DKIM签名者类是错误的或者使用了错误的键。 – Borealid 2012-07-30 18:59:10

+0

如何检查没有邮件服务器正在更改正文内容?此外,关键是绝对正确的,只是双重检查它。 – nmford 2012-07-30 19:07:40

+0

检查您发送的消息和测试程序收到的消息。确保它们在签名的地方相同。 – Borealid 2012-07-30 19:17:26

回答

3

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

基本上你需要什么,以确保为您提供所有您的MTA添加到您出持续的电子邮件标头。由于不同的系统配置不同,因此没有适合所有解决方案的尺寸。

看这已经失败的签名(并且被给予改变的误差消息),以确定加到哪些报头的消息源。通常,你的MTA将添加消息ID日期头(Date标头也可能会导致较低的垃圾邮件刺客的分数,如果缺少它,所以你可以和包括它!)。

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

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

0

我发现PHP的邮件()+后缀的怪异行为与DKIM:

如果您

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

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

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

所有好! 奇怪。很奇怪。还有用户推荐制作

trim($emailContent)