Exim

Exim 中的 8 位到 Quoted-Printable 編碼

  • May 8, 2019

是否有可能以及如何配置 Exim4 郵件伺服器以在使用 DKIM 簽名並傳輸它們之前將傳出消息(或消息部分)從 8 位編碼轉換為 Quoted-Printable(或 Base64,儘管我更喜歡 QP) ?

我們目前有一個設置,其中包含 8 位部分的消息在到達目標伺服器時會獲得無效的 DKIM 簽名,因為它們被上游伺服器(我們無法控制)轉換為 Quoted-Printable。不幸的是,我們不能真正抱怨上游伺服器的行為,因為 RFC4871 明確指出簽名伺服器必須在簽名之前以適當的編碼重新編碼郵件(參見

$$ RFC4871 section 5.3 $$$$ 1 $$):

為了最大限度地減少這種破壞的可能性,簽名者應該將消息轉換為合適的 MIME 內容傳輸編碼,如 MIME 第 1 部分中所述的quoted-printable 或 base64

$$ RFC2045 $$在簽署之前。

因此,我希望這種轉換是任何支持 DKIM 的郵件伺服器的基本功能,但據我在 exim 手冊中搜尋,沒有類似的東西。這個問題有什麼已知的解決方案嗎?

$$ 1 $$: https://www.rfc-editor.org/rfc/rfc4871#section-5.3

我目前找到的解決方案是使用reformime該工具提供的命令maildrop,使用該-r7選項作為 Exim 傳輸過濾器。

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 不多,請小心。

引用自:https://serverfault.com/questions/961697