是否有可能以及如何配置 Exim4 邮件服务器以在使用 DKIM 签名并传输它们之前将传出消息(或消息部分)从 8 位编码转换为 Quoted-Printable(或 Base64,尽管我更喜欢 QP) ?
我们目前有一个设置,其中包含 8 位部分的消息在到达目标服务器时会获得无效的 DKIM 签名,因为它们被上游服务器(我们无法控制)转换为 Quoted-Printable。不幸的是,我们不能真正抱怨上游服务器的行为,因为 RFC4871 明确指出签名服务器必须在签名之前以适当的编码重新编码邮件(参见 [RFC4871 第 5.3 节][1]):
为了最大限度地减少这种破坏的可能性,签名者应该在签名之前将消息转换为合适的 MIME 内容传输编码,例如带引号的可打印或 base64,如 MIME 第 1 部分 [RFC2045] 中所述。
因此,我希望这种转换是任何支持 DKIM 的邮件服务器的基本功能,但据我在 exim 手册中搜索,没有类似的东西。这个问题有什么已知的解决方案吗?[1]:https ://www.rfc-editor.org/rfc/rfc4871#section-5.3
我目前找到的解决方案是使用
reformime
该工具提供的命令maildrop
,使用该-r7
选项作为 Exim 传输过滤器。maildrop
安装后,在 Exim 用于将邮件传输到目标服务器的 SMTP 传输上配置传输过滤器就足够了:对于我们的案例,它是
30_exim4-config_remote_smtp_smarthost
我们使用智能主机时的配置文件,对于没有智能主机的更多标准服务器,这将是30_exim4-config_remote_smtp
; 您可能还需要根据您使用的特定配置更改其他传输。reformime
是一个用纯 C 语言编写的小工具,因此非常轻量级并且对邮件处理增加的开销很小。然而,它似乎需要在内存中缓冲整个传输中的消息以进行处理,因此如果您的服务器非常繁忙且可用 RAM 不多,请小心。