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

时间:2013-01-12 20:38:22

标签: sendmail dkim

我有一个域名,其中包含12个不同网站的子域名。每个都在apache中有一个单独的虚拟主机。

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

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

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

帮助? - 吉姆

P.S。我已经尝试了各个角度,我很难过。我无法弄清楚Sendmail如何告诉DKIM使用哪个子域。我无法弄清楚PHP如何告诉Sendmail使用哪个子域名。我尝试在发送邮件之前设置$ _SERVER ['SERVER_NAME']来覆盖它,但它没有任何效果。我无法弄清楚单一的解决方法。

1 个答案:

答案 0 :(得分: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中,我有一行:     域* .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'。一切都有效。