编码对象筛选失败
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:-)
我正在尝试为 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:-)