编码对象筛选失败

Sieve fails on encoded subjects

我正在尝试为 sieve 设置过滤规则,以使用正则表达式向传入消息添加标志和 header,但是只要主题中有德语变音符号,sieve 就会失败。

这是我的 sieverule

require ["fileinto","editheader","variables","regex","imap4flags","encoded-character"];
if anyof (header :regex :comparator "i;ascii-casemap" "Subject" "([0-9]{3}-[0-9]{7}-[0-9]{7})")
{
        addheader :last "X-OrderID" "[=10=]";
addflag "\Flagged";
        addflag "[=10=]";
}

题目是这样的:

Rückfrage zur Lieferung einer Bestellung von xxx (Bestellung: 304-1962494-2978192)

第二个字母 ü 引起了麻烦。

当我尝试在没有它的情况下发送消息时,一切正常。

消息属于这种类型:

MIME-Version: 1.0
Content-Type: multipart/mixed; 

当主语中有元音变音时,改为

=?UTF-8?Q?R=C3=BCckfrage_zur_Lieferung_einer_Bestellung_von

但到目前为止我还没有找到转换它的方法。

在我的研究中,我发现了一个名为 mime 的 sieve 扩展

https://www.rfc-editor.org/rfc/rfc5703

但是,如果我尝试在我的脚本的 require 部分中要求它,我会收到一个错误,如果我尝试将它设置为附加扩展以筛选它不会重新加载配置,说扩展不是已知。

有人可以帮我解决这个问题吗?

这样不行。首先,你不需要require "encoded-character",它已经在基本集合中了(https://www.rfc-editor.org/rfc/rfc5228#page-10)。接下来,这里不需要anyof:comparator "i;ascii-casemap" 将字符 class 限制为 7 位 US-ASCII。邮件 body 的 MIME 版本与邮件 headers 无关,因此 RFC5703 根本不适用。

引用自 RFC5228(突出显示是我):

Comparisons are performed on octets. Implementations convert text from header fields in all charsets [MIME3] to Unicode, encoded as UTF-8, as input to the comparator (see section 2.7.3). Implementations MUST be capable of converting US-ASCII, ISO-8859-1, the US-ASCII subset of ISO-8859-* character sets, and UTF-8.

一切都是自动完成的。所以,只是不要请求显式 ASCII 比较。以下表达式将执行您想要的操作:

require ["fileinto","editheader","regex","imap4flags"];
if header :regex :comparator "i;octet" "Subject" "[[:graph:]]* ([0-9]{3}-[0-9]{7}-[0-9]{7})$" {
    ...
}

顺便说一句:如果您的 SIEVE 过滤器抛出错误,那是因为它不需要实现所有可选扩展。您没有提到您使用的是哪种软件,因此留给您作为练习,从您的 SIEVE 实施中找出功能字符串,它告诉您它支持哪些功能(参见 https://www.rfc-editor.org/rfc/rfc5228#page-31)。

希望这对您有所帮助,viele Grüße:-)