我试图为筛子设置过滤规则,以便使用正则表达式为传入的消息添加标记和标题,但是只要主题内有德语变音符号,筛选就会失败。
这是我的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部分中要求它,我会收到错误,如果我尝试将其设置为筛选的附加扩展,则不会重新加载配置,说扩展名不是已知的。
有人可以帮我解决这个问题吗?
答案 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: - )