10

我正在尝试使用 PHPMailer 类与 DKIM 签署电子邮件,但我无法让它工作。

当我在 gmail 上看到我的电子邮件中的标题时,我发现该类已成功在电子邮件标题中注入 DKIM,但 gmail 甚至不在乎。

问题是我查看了linkedIn 电子邮件的标头,发现它们使用了2 个DKIM 标头DomainKey-Signature& DKIM-Signature

有什么不同?这就是 Gmail 不验证我的电子邮件的原因吗?&您是否推荐任何替代且强大的类来使用 php 上的域密钥签署电子邮件?

谢谢

4

2 回答 2

12

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

域密钥是第一个版本。

DKIM 是更新版本。

不同之处在于域密钥和 DKIM 如何对消息进行签名以及构建标头。

电子邮件收件人可以实现它们中的任何一个(或两者)。如果您想覆盖所有基础,您唯一能做的就是与两个班级签约。

您想了解有关 DomainKeys 与 DKIM 之间差异的技术细节吗?

——戴夫

于 2010-11-30T14:03:38.560 回答
0

PHPMailer 5.1 中的 DKIM 支持无法正常工作。这是我必须做的,才能让它工作:

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

  2. 在第 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;
  }
于 2011-03-19T01:02:40.733 回答