2012-07-30 92 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)