Sieve在编码主题上失败

时间:2015-06-06 05:37:32

标签: regex character-encoding imap sieve-language

我试图为筛子设置过滤规则,以便使用正则表达式为传入的消息添加标记和标题,但是只要主题内有德语变音符号,筛选就会失败。

这是我的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://tools.ietf.org/html/rfc5703

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

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

1 个答案:

答案 0 :(得分:3)

这种方式无法正常工作。首先,您不需要require "encoded-character",它已经在基本集中(http://tools.ietf.org/html/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,US-ASCII子集   ISO-8859- *字符集,和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})$" {
    ...
}

BTW:如果您的SIEVE过滤器抛出错误,那是因为它不需要实现所有可选扩展。您没有提到您使用的软件,因此您可以通过练习找出SIEVE实现中的功能字符串,它告诉您它支持哪些功能(参见http://tools.ietf.org/html/rfc5228#page-31)。

希望这有帮助,vieleGrüße: - )