使用 DKIM 密钥在 phpmailer 中发送邮件

Posted

技术标签:

【中文标题】使用 DKIM 密钥在 phpmailer 中发送邮件【英文标题】:Send mail in phpmailer using DKIM Keys 【发布时间】:2014-08-19 05:57:55 【问题描述】:

Currents 我正在使用 phpmailer 发送邮件。现在如何使用 DKIM 密钥在 phpmailer 中发送电子邮件

我在 phpmailer 类文件中搜索,我找到了下面的代码

    /**
     * DKIM selector.
     * @type string
     */
    public $DKIM_selector = '';

    /**
     * DKIM Identity.
     * Usually the email address used as the source of the email
     * @type string
     */
    public $DKIM_identity = '';

    /**
     * DKIM passphrase.
     * Used if your key is encrypted.
     * @type string
     */
    public $DKIM_passphrase = '';

    /**
     * DKIM signing domain name.
     * @example 'example.com'
     * @type string
     */
    public $DKIM_domain = '';

    /**
     * DKIM private key file path.
     * @type string
     */
    public $DKIM_private = '';

我能知道它是怎么可能的吗?

【问题讨论】:

您遇到的具体问题是什么? cmets 似乎完全可以解释。 我对此进行了试验,但无法使其发挥作用。我为 Sendmail 选择了 OpenDKIM 过滤器,它的优点是所有出站邮件都经过签名 【参考方案1】:

如果您查看PHPMailer unit tests,有一个如何设置 DKIM 的示例。

这里是您发送消息所需的基础知识(显然更改域、密钥路径和选择器以匹配您的配置,并添加密码(如果您使用));这也假设您打算使用与您的From 地址相同的标识符进行签名:

$mail->DKIM_domain = 'example.com';
$mail->DKIM_private = '/path/to/my/private.key';
$mail->DKIM_selector = 'phpmailer';
$mail->DKIM_passphrase = '';
$mail->DKIM_identity = $mail->From;

当您send() 邮件(而不是之前)时,它将使用这些设置生成 DKIM 签名。

【讨论】:

DKIM_selector 总是'phpmailer' 吗? 感谢您的帮助。有关如何设置 DKIM 的完整指南,我整理了一份指南 yomotherboard.com/how-to-setup-email-server-dkim-keys DKIM_identifier 现在是 DKIM_identity (PHPMailer 5.2.13) DKIM_selector 是您的 DNS TXT 记录上的选择器键设置。并不总是像示例中那样使用 phpmailer。 要使用私钥字符串而不是设置文件路径,您可以简单地在 phpMailer 对象上指定 $mail -> DKIM_private_string 属性。【参考方案2】:

我有以下经验:

    http://dkim.worxware.com/createkeys.php 生成的密钥对可能用于 SHA1,而 class.phpmailer.php 的最新版本 5.2.14 用于 SHA256。 上面的示例不起作用。 我将 class.phpmailer.php 中的所有设置和函数从 SHA1 上的 SHA256 更改(我只是将所有字符串 SHA256 替换为字符串 SHA1)。 我的 DKIM 签名 PHP 脚本已经可以使用了。

【讨论】:

花了我几个小时才发现这是我的问题!非常令人沮丧!我使用这个站点来生成我的密钥socketlabs.com/domainkey-dkim-generation-wizard。使用最新版本的 phpmailer (5.2.14) 工作正常 避免使用 SHA1 系列函数。今年早些时候发布了对 SHA1 的实际攻击 (shattered.io)。有很多关于如何使用 openssl 生成 DKIM 密钥对的说明。此外,让第三方网站为您生成任何安全密钥通常不是一个好主意。如果他们存储密钥,他们可以冒充您。相反,使用 openssl 离线生成它。

以上是关于使用 DKIM 密钥在 phpmailer 中发送邮件的主要内容,如果未能解决你的问题,请参考以下文章

在 Web 应用程序中读取私有 dkim 文件内容的用户权限

尽管设置了 DKIM 和 SPF,但电子邮件仍被发送到垃圾邮件文件夹?

DKIM对发送邮件的好处及使用方法

ThinkPHP中使用PHPMailer发送邮件

Java:将 DKIM 私钥从 RSA 转换为 DER for JavaMail

我的邮件 DKIM-Signature 凭空创建了一个电子邮件地址