我正在尝试使用PHPMailer Class使用DKIM签署电子邮件,但我无法让它工作。
当我在gmail的电子邮件中看到标题时,我发现该类已成功在电子邮件标题中注入DKIM,但gmail甚至不关心。
问题是我查看了LinkedIn电子邮件的标题,我发现他们正在使用2个DKIM标题,DomainKey-Signature
& DKIM-Signature
。
有什么区别?这就是为什么Gmail无法验证我的电子邮件? &安培;你推荐任何替代品吗?在php上使用域密钥签署电子邮件的健壮类?
由于
答案 0 :(得分:11)
两者都使用公钥/私钥对电子邮件进行数字签名。两者都使用发件人DNS服务器中的文本文件,该文件包含收件人可用于验证签名的公钥。
Domain Keys是第一个版本。
DKIM是更新版本。
不同之处在于Domain Keys和DKIM如何签署消息并构建标头。
电子邮件收件人可以实施其中任何一个(或两者)。如果你想覆盖所有基础,你唯一可以做的就是与两个班级签约。
您是否需要有关DomainKeys与DKIM之间差异的技术细节?
- 戴夫
答案 1 :(得分:0)
PHPMailer 5.1中的DKIM支持无法正常使用。以下是我必须做的事情,让它发挥作用:
我在此网址上应用了修补程序:http://sourceforge.net/tracker/index.php?func=detail&aid=2960165&group_id=26031&atid=385707
在第566行,我不得不改变这一点:
// digitally sign with DKIM if enabled
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;
}