我正试图使用PHPMailer类对电子邮件进行DKIM签名,但无法使其正常工作。
当我在Gmail上查看我的电子邮件的标题时,发现该类成功地将DKIM注入了电子邮件头部,但Gmail似乎并不关心。
问题在于,我查看了LinkedIn电子邮件的标题,发现它们使用了两个DKIM标头:DomainKey-Signature
和DKIM-Signature
。
这有什么区别? Gmail是否因此无法验证我的电子邮件?您是否推荐任何其他强大的类来对PHP中的域密钥进行电子邮件签名?
谢谢
我正试图使用PHPMailer类对电子邮件进行DKIM签名,但无法使其正常工作。
当我在Gmail上查看我的电子邮件的标题时,发现该类成功地将DKIM注入了电子邮件头部,但Gmail似乎并不关心。
问题在于,我查看了LinkedIn电子邮件的标题,发现它们使用了两个DKIM标头:DomainKey-Signature
和DKIM-Signature
。
这有什么区别? Gmail是否因此无法验证我的电子邮件?您是否推荐任何其他强大的类来对PHP中的域密钥进行电子邮件签名?
谢谢
两者都使用公钥/私钥对电子邮件进行数字签名。两者都使用发送方DNS服务器中包含公钥的文本文件,接收方可以使用该公钥来验证签名。
Domain Keys是第一个版本。
DKIM是更新版本。
区别在于Domain Keys和DKIM如何签署消息以及构建标头。
电子邮件接收者可能实现其中任何一个(或两个)。 如果您想覆盖所有基础知识,则只能使用两个类别都进行签名。
您是否想要了解DomainKeys与DKIM之间的技术细节?
-- Dave
PHPMailer 5.1中的DKIM支持不能直接正常工作。以下是我实现它所需进行的操作:
我在这个网址 http://sourceforge.net/tracker/index.php?func=detail&aid=2960165&group_id=26031&atid=385707 上应用了修复。
在第 566 行,我不得不更改以下内容:
// 如果启用,则使用 DKIM 进行数字签名
if ($this->DKIM_domain && $this->DKIM_private) {
$header_dkim = $this->DKIM_Add($header,$this->Subject,$body);
$header = str_replace("\r\n","\n",$header_dkim) . $header;
}
...变成这样:
// digitally sign with DKIM if enabled
if ($this->DKIM_domain && $this->DKIM_private) {
// Hack to add To: header to the headers which are passed to DKIM_Add
// Note that this only adds the first To: recipient, so it's going to break
// if you try to send an email to more than one person simultaneously
$header_temp = $header . $this->LE . 'To: ' . $this->to[0][0];
$header_dkim = $this->DKIM_Add($header_temp,$this->EncodeHeader($this->SecureHeader($this->Subject)),$body);
$header = str_replace("\r\n","\n",$header_dkim) . $header;
}