【问题标题】:How to send email with Phpmailer with DKIM signature?如何使用带有 DKIM 签名的 Phpmailer 发送电子邮件?
【发布时间】:2012-02-01 01:34:46
【问题描述】:

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

我安装了 postfix 服务和 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=

但我想使用 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 是什么?

【问题讨论】:

  • 因为它们是可选的,你可能不需要它们?
  • @BloodyWorld 如果你想发送带有 DKIM 签名的邮件,它们是必备的。

标签: php sendmail postfix-mta phpmailer dkim


【解决方案1】:

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

希望有帮助

【讨论】:

  • DKIM_private 是带有密钥的文件路径,而不是密钥字符串本身。
【解决方案2】:

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

【讨论】:

  • 虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接答案可能会失效。 - From Review
  • @Magicprog.fr,他确实包含了他的答案的基本部分,解释了如何解决它-它是否正确-还有他发布的链接不是关于回答问题的,因为这只是 DKIM 生成器的链接,所以 IMO 这是一个尝试回答而不是仅链接的答案,谢谢
【解决方案3】:

从这里开始

http://dkim.worxware.com/

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

它可以让您生成带有说明的私钥/公钥

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

【讨论】:

    【解决方案4】:

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

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

    【讨论】:

    • 唯一真正发现OP已经能够在PHPMailer中设置DKIM的答案......但Gmail不喜欢它! +1
    猜你喜欢
    • 2015-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-10
    相关资源
    最近更新 更多