Eximfilter,头文件variables和MIME编码

我编写了eximfilter来转发电子邮件(如maillist)。 在过滤条件我使用头variables。 而且我面对一些使用$ h_subject编码的困难。 试着用例子来解释。

从gmail发送的新邮件以less量俄语单词为主题。 当然,主题头是MIME编码的。 它看起来像这样:

Subject: =?utf-8?Q?[nr=5Fbill]=20=D0=9D=D0=BE=D0=B2=D1=8B=D0=B9=20?= =?utf-8?Q?=D0=B7=D0=B0=D0=BA=D0=B0=D0=B7=20=D0=BE=D1=84=D0=BE=D1=80=D0=BC=D0=BB=D0=B5=D0=BD?= 

在Eximfilter中,我想使用下一个条件: $h_subject: contains "[nr_bill] Новый заказ оформлен"

问题是Exim只解docker的第一行。 解码的头文件如下所示:

 [nr_bill] \320\235\320\276\320\262\321\213\320\271 \n =?utf-8?Q?=D0=B7=D0=B0=D0=BA=D0=B0=D0=B7=20=D0=BE=D1=84=D0=BE=D1=80=D0=BC=D0=BB=D0=B5=D0=BD?= 

第一行被成功解码,可用于filter。 但是第二行没有解码。 最糟糕的是,Exim节省了空间和换行符。 据我所知,标题中的新行和前导空格在parsing时必须省略。

所以$h_subject: contains "[nr_bill] Новый工作正常,而$h_subject: contains "[nr_bill] Новый заказ оформлен"不。

手册说,换行+空格是正常的做法。 但它说没有关于多部分MIME解码。

任何人都可以提出如何解决这个问题,或只是解释这些行为的重点?

答案被发现。 感谢菲尔 🙂

Exim非常谨慎地遵循RFC2047中的MIME规范,该规范在每个编码字上放置了最大长度。

—————————- 8 <cut here> 8 —————- ————–

encoded-word =“=?” charset“?” 编码“?” encoding-text“?=”[…]

“编码字”的长度不能超过75个字符,包括字符集,编码,编码文本和分隔符。 如果希望编码比75个字符的“编码字”更多的文本,则可以使用多个“编码字”(由CRLF SPACE分隔)。

—————————- 8 <cut here> 8 —————- ————–

因此,MIME解码器正在跳过这些长string并逐字添加。

如果在Exim的主configuration中设置“check_rfc2047_length”为false,则标题将被正确解码。 我会假设(但没有检查)Exim会根据需要正确地重新编码。

check_rfc2047_length = false

因此,在设置check_rfc2047_length = false之后,有问题的主题的所有变体都被正确解码。