1

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

这是我的 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" "${0}";
addflag "\\Flagged";
        addflag "${0}";
}

主题是这样的:

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 的筛子扩展

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

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

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

4

1 回答 1

3

它不能这样工作。首先,您不需要require "encoded-character",它已经在基本设置中(https://www.rfc-editor.org/rfc/rfc5228#page-10)。接下来,你不需要anyof这里。将:comparator "i;ascii-casemap"字符类限制为 7 位 US-ASCII。邮件正文的 MIME 版本与邮件标题无关,因此 RFC5703 根本不适用。

引用 RFC5228(突出显示我):

比较是在八位字节上执行的。实现将文本从所有字符集 [MIME3] 中的标头字段转换为 Unicode,编码为 UTF-8,作为比较器的输入(参见第 2.7.3 节)。实现必须能够转换 US-ASCII、ISO-8859-1、ISO-8859-* 字符集的 US-ASCII 子集和 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 :-)

于 2015-09-25T07:10:14.627 回答