有人找到了使用 PHPMailer 中的 DKIM 选项来发送 DKIM 签名的电子邮件而无需编辑 wp-core 文件的解决方案吗?
PHPMailer 具有以 $DKIM_ 开头的公共属性,可用于发送 DKIM 签名的消息。我知道该怎么做。我可以对 PHPMailer.php 文件中的值进行硬编码,直到 WP 更新并覆盖这些更改为止。
我还查看了 /wp-includes/pluggable.php,它调用了 PHPMailer 类,但找不到一种方法来挂钩该类以设置正确的 DKIM 属性值。
有插件或者其他解决方案吗?
最诚挚的问候, 彼得
是的。您可以通过
phpmailer_init
钩子获取 WordPress 使用的 PHPMailer 实例,并且可以将钩子代码保存为站点 functions.php
文件的一部分,该文件将在更新后继续存在。 文档在这里,一个基本示例是:
add_action('phpmailer_init', function ($mailer){
$mailer->isSMTP();
$mailer->Host = "mail.example.com"; // your SMTP server
$mailer->Port = 25;
$mailer->SMTPDebug = 2;
$mailer->CharSet = "utf-8";
//etc
});
您也可以在其中设置 DKIM 参数。
无需直接使用 WPCode 插件编辑文件即可完成此操作 https://wordpress.org/plugins/insert-headers-and-footers/
安装插件并激活,然后创建一个新的代码片段。确保下拉选择器中的类型为“PHP Snippet”,然后粘贴以下内容,替换您的详细信息
add_action('phpmailer_init', function (\PHPMailer\PHPMailer\PHPMailer $mail) {
$mail->DKIM_domain = 'example.com';
$mail->DKIM_private = '/path/to/your/private/key.private';
$mail->DKIM_selector = 'domainselector';
$mail->DKIM_passphrase = 'privatekeypassword';
$mail->DKIM_identity = $mail->From;
return $mail;
});
生成 DKIM 可以通过
完成openssl genrsa -aes256 -passout pass:privatekeypassword -out key.private 2048
openssl rsa -in key.private -pubout > key.public
(确保将
privatekeypassword
替换为更安全的内容,并在 PHP 代码片段中进行更改)
在 DNS 中创建 DKIM 记录是作为具有名称的 TXT 记录完成的
domainselector._domainkey.example.com
和价值
v=DKIM1; k=rsa; p=
并在
p=
之后添加位,其中包含 key.public
的内容,不带“开始/结束公钥”行,并删除所有换行符
将 TXT 键值中的
domainselector
替换为与 PHP 中的 $mail->DKIM_SELECTOR
中相同的值。