DomainKey-Signature和DKIM-Signature有什么区别?

10

我正试图使用PHPMailer类对电子邮件进行DKIM签名,但无法使其正常工作。

当我在Gmail上查看我的电子邮件的标题时,发现该类成功地将DKIM注入了电子邮件头部,但Gmail似乎并不关心。

问题在于,我查看了LinkedIn电子邮件的标题,发现它们使用了两个DKIM标头:DomainKey-SignatureDKIM-Signature

这有什么区别? Gmail是否因此无法验证我的电子邮件?您是否推荐任何其他强大的类来对PHP中的域密钥进行电子邮件签名?

谢谢

2个回答

12

两者都使用公钥/私钥对电子邮件进行数字签名。两者都使用发送方DNS服务器中包含公钥的文本文件,接收方可以使用该公钥来验证签名。

Domain Keys是第一个版本。

DKIM是更新版本。

区别在于Domain Keys和DKIM如何签署消息以及构建标头。

电子邮件接收者可能实现其中任何一个(或两个)。 如果您想覆盖所有基础知识,则只能使用两个类别都进行签名。

您是否想要了解DomainKeys与DKIM之间的技术细节?

-- Dave


谢谢Dave的回答,如何为电子邮件生成签名头? - CodeOverload
很抱歉,我不知道如何用PHP做这个。对不起。 - dave wanta
看起来PHPMailer支持DKIM。虽然没有测试过:http://www.worxware.com/forum/viewthread.php?tid=185 - Christian Joudrey

0

PHPMailer 5.1中的DKIM支持不能直接正常工作。以下是我实现它所需进行的操作:

  1. 我在这个网址 http://sourceforge.net/tracker/index.php?func=detail&aid=2960165&group_id=26031&atid=385707 上应用了修复。

  2. 在第 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;
  }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接