Exim 中的 8bit 到 Quoted-Printable 编码

Exim 中的 8bit 到 Quoted-Printable 编码

是否有可能以及如何配置 Exim4 邮件服务器,以在使用 DKIM 签名并传输传出邮件(或邮件部分)之前将其从 8 位编码转换为 Quoted-Printable(或 Base64,尽管我更喜欢 QP)?

我们目前有一个设置,其中包含 8 位部分的邮件在到达目标服务器时会获得无效的 DKIM 签名,因为它们被上游服务器(我们无法控制)转换为 Quoted-Printable。不幸的是,我们真的不能抱怨上游服务器的行为,因为 RFC4871 明确指出,签名服务器必须在签名之前以适当的编码重新编码邮件(请参阅 [RFC4871 第 5.3 节][1]):

为了尽量减少这种破坏的可能性,签名者在签名之前应该将消息转换为合适的 MIME 内容传输编码,例如 MIME 第一部分 [RFC2045] 中描述的 quoted-printable 或 base64。

因此,我希望这种转换是任何支持 DKIM 的邮件服务器的基本功能,但据我在 exim 手册中搜索,没有类似的东西。有没有什么已知的解决方案可以解决这个问题?[1]:https://www.rfc-editor.org/rfc/rfc4871#section-5.3

答案1

我目前找到的解决方案是使用该工具reformime提供的命令,使用该选项作为 Exim 传输过滤器。maildrop-r7

安装完成后maildrop,只需在 Exim 用于将邮件传输到目标服务器的 SMTP 传输上配置传输过滤器即可:

remote_smtp_smarthost:
  debug_print = "T: remote_smtp_smarthost for $local_part@$domain"
  driver = smtp
# filter outgoing messages to convert 8-bit to Quoted-Printable when needed
  transport_filter = /usr/bin/reformime -r7

对于我们的情况,它是30_exim4-config_remote_smtp_smarthost配置文件,因为我们使用智能主机,对于没有智能主机的更多标准服务器,这将是30_exim4-config_remote_smtp;您可能还需要根据您使用的特定配置更改其他传输。

reformime是一个用纯 C 语言编写的小工具,因此非常轻量,并且几乎不增加邮件处理的开销。但是,它似乎需要将整个传输中的邮件缓冲在内存中以供处理,因此如果您的服务器非常繁忙且可用 RAM 不多,请小心。

相关内容