Exim:如何closuresDKIM以转发邮件?

根据文档 ,我在Exim中为传出邮件configuration了DKIM。 Exim签署所有外发邮件。 但是这些传出的消息中有一些是转发的,这要归功于用户的.forward文件。 这对我来说是一个问题,因为有些转发者是垃圾邮件(我的eximconfiguration没有做任何validation),我不想为他们负责。 但我不知道如何configurationExim不签署这些消息。

我的configuration基本上是Debian Squeeze的默认设置,设置了一些DKIM_*macros。 我可以发表更多的细节,但是我认为看到任何有条件的DKIM签名的例子都会让我感到满意。

necropost的位,但我只是使用一行:

 dkim_private_key = ${if or {{!def:sender_host_address}{def:authenticated_id}}{DKIM_PRIVATE_KEY}{}} 

(其中DKIM_PRIVATE_KEY是一个给我的dkim私钥的path的macros)。

那么如果这是一个“本地发起的”消息(所以$ sender_host_address是未定义的),或者电子邮件来自已authentication的用户,dkim_private_key将被设置,并且消息将被签名。

否则(假设我们不是中继,这应该只是表示我们正在转发消息),dkim_private_key将是空string(从规范中)表示消息不会被签名。

我有一个类似的设置(虽然我做垃圾邮件/病毒扫描我转发的电子邮件,我强烈build议你也应该这样做)。 我有一个路由器,检测转发的电子邮件,以及一个路由器,检测smtp身份validation,以及一个路由器,检测来自networking邮件系统。 在你的情况下,你可以使用〜/ .forward文件来帮助决定它是一个转发器而不是一个本地交付。 每个路由器都设置了针对每种情况devise的特定传输。 运输是签署的地方,或者没有完成。 正如你可以看到我的交通configuration下面,我DKIM签署networking邮件和smtp身份validation,但不是转发:

 remote_smtp_authenticated: debug_print = "Transport: remote_smtp_authenticated for $local_part@$domain" driver = smtp max_rcpt = 10 hosts_max_try = 2 .include_if_exists /etc/exim/dkim_transports.conf remote_smtp_webmail: debug_print = "Transport: remote_smtp_webmail for $local_part@$domain" driver = smtp max_rcpt = 10 hosts_max_try = 2 .include_if_exists /etc/exim/dkim_transports.conf remote_smtp_forwarder: debug_print = "Transport: remote_smtp_forwarder for $local_part@$domain" driver = smtp max_rcpt = 10 hosts_max_try = 2 

dkim_transports.conf只需使用专门为我的网站devise的一系列macros设置所有的dkim_ *设置:

 CentOS58[root@ivwm51 exim]# more dkim_transports.conf .ifdef DKIM_SIGNING dkim_domain = DKIM_DOMAIN dkim_selector = DKIM_SELECTOR dkim_private_key = DKIM_PRIVATE_KEY .endif 

你可以用类似的方法来模拟你的

我只是在设置dkim_domain时检查authenticated_sendervariables 。

 dkim_domain = ${if def:authenticated_sender {DKIM_DOMAIN}} 

这包括SMTPauthentication的客户端和本地用户。

您可以在任何必需的DKIM选项中添加该条件,包括dkim_domaindkim_selectordkim_private_key

您还可以根据邮件是从本地生成,从经过身份validation的客户端还是转发来构buildselect器不同的更复杂的设置。 这样你可以有三种不同的邮件来源的声誉。

例如,要使用单独的密钥进行身份validation/本地与转发的消息:

 dkim_selector = ${if def:authenticated_sender {authenticated}{forwarded}}