在 Wordpress PHPMailer 中使用 DKIM 记录,使其在 WP 更新后仍然存在

问题描述 投票:0回答:2

有人找到了使用 PHPMailer 中的 DKIM 选项来发送 DKIM 签名的电子邮件而无需编辑 wp-core 文件的解决方案吗?

PHPMailer 具有以 $DKIM_ 开头的公共属性,可用于发送 DKIM 签名的消息。我知道该怎么做。我可以对 PHPMailer.php 文件中的值进行硬编码,直到 WP 更新并覆盖这些更改为止。

我还查看了 /wp-includes/pluggable.php,它调用了 PHPMailer 类,但找不到一种方法来挂钩该类以设置正确的 DKIM 属性值。

有插件或者其他解决方案吗?

最诚挚的问候, 彼得

wordpress phpmailer dkim
2个回答
1
投票

是的。您可以通过

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 参数。


0
投票

无需直接使用 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
中相同的值。

© www.soinside.com 2019 - 2024. All rights reserved.