如何伪装 Sendmail 域并让 DKIM 使用正确的域

如何伪装 Sendmail 域并让 DKIM 使用正确的域

我有一个域名,其中包含十几个用于不同网站的子域名。每个子域名在 Apache 中都有一个单独的虚拟主机。

我将 sendmail 配置为伪装成顶级域,以便电子邮件始终来自顶级域而不是子域。

不幸的是,DKIM 标头 d= 和 i= 字段显示子域。由于 DNS 记录存储在顶级域中,因此 DKIM 检查失败。

我如何告诉 DKIM 使用顶级域名?

请帮忙。

附言:我已经尝试了所有角度,但还是不知所措。我不明白 Sendmail 如何告诉 DKIM 使用哪个子域。我也不明白 PHP 如何告诉 Sendmail 正在使用哪个子域。我尝试在发送邮件之前设置 $_SERVER['SERVER_NAME'] 来覆盖它,但没有效果。我找不到任何解决方法。

答案1

该问题源于标题的重写,这里讨论: https://serverfault.com/questions/442180/sendmail-rewriting-headers-after-opendkim-signature

建议的解决方案之一是在 PHP 中设置正确的标头,以便 sendmail 获得正确的域信息并且不涉及重写。

就我而言,我意识到这意味着设置 $_SERVER['SERVER_NAME'] 是正确的做法,因为它可以很容易地修复问题。我曾提到它对我来说不起作用,因为我认为 Sendmail 忽略了该值。但我再次尝试,发现 Sendmail 确实识别了 $_SERVER['SERVER_NAME'] 中的值。我之前没有意识到的问题是,我错误地配置了 DKIM 过滤器。

在 dkim-filter.conf 中,我有以下行:Domain *.mydomain.com

当 Sendmail 在标头信息中收到“mydomain.com”并调用 DKIM-Milter 时,DKIM 无法找到匹配项,因为“mydomain.com”显然与 *.mydomain.com 不匹配。我将 *.mydomain.com 更改为 mydomain.com,一切开始正常工作。

因此,我在所有网站上要做的就是在调用 mail() 或 wp_mail()(对于 WordPress)之前设置 $_SERVER['SERVER_NAME'] = 'mydomain.com'。然后一切正常。

相关内容