我已经在 debian 服务器上使用 exim4 设置了 DKIM。在一个固定域下,一切都运行正常,例如,以下运行正常。
DKIM_DOMAIN = example.com
现在我尝试将其更改为适用于多域。因此我将其更改为
DKIM_DOMAIN = ${lc:${domain:$h_from}}
(其他更改以及必需的更改)- 但是这会中断,因为实际的电子邮件是从各个地方发送的*.example.com
。因此,我想我会使用 `${sg...} 来删除第一部分,但是我遇到了问题。无论我尝试什么,都会导致 exim 在日志中吐出以下内容:
failed to expand dkim_domain: missing } at end of string - could be header name not terminated by colon
由于一些域名是“.com”,而另一些是“.co.uk”,情况变得更加复杂。至少,我需要满足example.org
、example.com
和 的要求example.co.uk
。
这是我目前得到的:
${sg{${lc:${domain:$h_from}}}{\N^.+\.(example\.(co\.uk|org|com))\$\N}{\$1}}
这再次导致上述错误消息。有人能帮我解决这个问题吗?
答案1
我使用以下配置项为多个发件人域签名。所有站点都使用相同的私钥。如果它们使用不同的密钥,设置私钥会更加困难,但这是可以做到的。我使用选择器作为私钥文件扩展名。目前它是201710
。
DKIM_CANON = relaxed
DKIM_DOMAIN = ${sender_address_domain}
DKIM_PRIVATE_KEY = CONFDIR/dkim.private.201710
DKIM_SELECTOR = ${extract{-1}{.}{DKIM_PRIVATE_KEY}}
DKIM_STRICT = true
DKIM_WARN = true
您需要在您签名的所有域中发布公钥,否则收件人将无法验证签名。
我写了一篇文章使用 Exim 实现 DKIM。