如何使用带有DKIM签名的Phpmailer发送电子邮件?

时间:2012-01-02 20:29:58

标签: php sendmail postfix-mta phpmailer dkim

我正在使用PHPmailer发送电子邮件。

我安装了postfix服务和DKIM-Milter来生成密钥。

如果我使用命令行发送邮件,它的工作正常,邮件是DKIM签名显示“签名: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=

但是我想使用PHPmailer(5.1)发送支持DKIM签名的邮件,但是返回:

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?

4 个答案:

答案 0 :(得分:8)

$ 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';

希望有所帮助

答案 1 :(得分:3)

您需要拆分DKIM-Signature标题,以便每个属性都显示在新行上。 DKIM的PHPMailer实现有一些必须纠正的问题。

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

答案 2 :(得分:0)

从这里开始

http://dkim.worxware.com/

点击底部 - 点击继续....

它将使您生成带有说明的私钥/公钥

简而言之: - 设置使用私钥/公钥文件在电子邮件标题中添加dkim标头 - 修改公钥的DNS txt记录

答案 3 :(得分:0)

我发现最新版本使用sha256而不是sha1所以现有的DKIM生成器(http://dkim.worxware.com/)不起作用,除非你进入class.phpmailer.php文件并编辑sha256的所有提及回来sha1,执行此操作修复了验证程序无法使用sha256作为公钥的问题(给出错误)