如何使用Phpmailer和DKIM签名发送电子邮件?

3
我正在使用PHPmailer发送电子邮件。
我安装了邮政服务和DKIM-Milter以生成密钥。
如果我使用命令行发送邮件,一切正常,并且该邮件带有DKIM签名,显示“signed-by:mydomain.com”。
Authentication-Results: mx.google.com; spf=pass (google.com: domain of root@mydomain.com designates 182.50.xxx.xxx as permitted sender) smtp.mail=root@mydomain.com; dkim=pass header.i=@mydomain.com

DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=mydomain.com; s=default;
    t=1325531456; bh=+gZFhu4Id2AXb8UVbFLzDVVlChWGhvxvJUIdjdMLQsk=;
    h=To:Subject:Message-Id:Date:From;
    b=mH4GV8ayicc6UMn1uopCc9VJb5v2MiOKQpEtwJjckzoJ8ePhRKQIZI5KnzSdSoSP3
     BtmehOQhMn9kIR/TlL2dlSog2EkRNeAaWcmO1K3khtCZ7rkXHGJsDn9C6l49K0tJa2
     rplPOSI7wS8+3NCEiuc5sjZimPo4v9WuTECVqxkg=

我想使用支持DKIM签名的PHPmailer(5.1)发送邮件,但返回了以下内容:

Authentication-Results: mx.google.com; spf=pass (google.com: domain of info@mydomain.com designates 182.50.xxx.xxx as permitted sender) smtp.mail=info@mydomain.com; dkim=neutral (bad format) header.i=info@mydomain.com

DKIM-Signature: v=1; a=rsa-sha1; q=dns/txt; l=70; s=default;
    t=1325533594; c=relaxed/simple;
    h=From:To:Subject;
    d=mydomain.com; i=@mydomain.com;
    z=
    |
    |Subject:=20Testing=20email=20from=20phpmailer;
    bh=lC+16EvauA2HuJG03ArE6CtgLuY=;
    b=

我查看了class.phpmailer.php文件,它有一些DKIM选项:

  public $DKIM_selector   = 'default';

  /**
   * Used with DKIM DNS Resource Record
   * optional, in format of email address 'you@yourdomain.com'
   * @var string
   */
  public $DKIM_identity   = '';

  /**
   * Used with DKIM DNS Resource Record
   * optional, in format of email address 'you@yourdomain.com'
   * @var string
   */
  public $DKIM_domain     = '';

  /**
   * Used with DKIM DNS Resource Record
   * optional, in format of email address 'you@yourdomain.com'
   * @var string
   */
  public $DKIM_private    = '';

如何配置此选项?我知道公钥和私钥,但$DKIM_private和$DKIM_identity是什么?


既然它们是可选的,你可能不需要它们? - Corubba
如果您想发送带有DKIM签名的邮件,那么它们是必不可少的。 - Angolao
4个回答

9

$DKIM_private是您的私钥,$DKIM_identity我不确定是否必须的,你可以在这里找到更多信息:http://dkim.org/specs/draft-allman-dkim-base-01.html#anchor9。下面是一些示例代码。

$mail->DKIM_domain = 'mydomain.com';
$mail->DKIM_private = '/path/to/private_key';
$mail->DKIM_selector = 'default'; //this effects what you put in your DNS record
$mail->DKIM_passphrase = '1234567';

希望这能帮到您。

2
“DKIM_private”是一个文件路径,而不是密钥本身的字符串。 - Turako

3

您需要将DKIM-Signature头部拆分成每个属性出现在新行上。 PHPMailer实现的DKIM存在一些问题,必须进行纠正。

$DKIM_identity 值是可选的。要了解 $DKIM_private 的作用,请参见 DKIM_Sign 方法。


唯一的答案实际上指出了OP已经能够在PHPMailer中设置DKIM,但是Gmail不喜欢它!+1 - hiburn8

0

从这里开始

http://dkim.worxware.com/

在底部 - 点击“继续”...

它将允许您生成带有说明的私钥/公钥。

简而言之:- 设置使用私钥/公钥文件发送以添加电子邮件头中的DKIM标头- 修改公钥的DNS txt记录。


0

我发现最新版本使用sha256而不是sha1,因此现有的DKIM生成器(http://dkim.worxware.com/)无法工作,除非您进入class.phpmailer.php文件并将所有提到的sha256编辑回sha1,这样做可以解决验证程序无法使用sha256进行公钥验证的问题(导致错误)。


虽然这个链接可能回答了问题,但最好在此处包含答案的基本部分并提供参考链接。如果链接页面更改,仅链接的答案可能会失效。-【来自审查】 - Magicprog.fr
@Magicprog.fr,他确实包含了关键部分的答案并解释了如何修复它-无论是否正确-他发布的链接也不是关于回答问题的,因为那只是DKIM生成器的链接,所以在我看来这是一种尝试回答而不是仅仅提供链接的回答。谢谢。 - Mi-Creativity

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