Regex Spamasassin匹配汉字/汉字

Regex Spamasassin匹配汉字/汉字,regex,perl,spamassassin,Regex,Perl,Spamassassin,我正在尝试实现一个规则,将所有汉字(汉族)与 SpamAssassin版本3.3.1 在Perl版本5.10.1上运行 到目前为止,我尝试了以下规则: body SPAM44 /\p{Han}/ body SPAM44 /[\x{4e00}-\x{9FFF}]/ body SPAM44 /[一-俿倀-忿怀-濿瀀-翿耀-迿退-龥]+/ 前两条规则根本不匹配。最后一条规则几乎匹配我所有的邮件。 所有这些规则在regex101.com上都很有效。所以这可能是Spamasassin特有的问题 应匹配的

我正在尝试实现一个规则,将所有汉字(汉族)与

SpamAssassin版本3.3.1 在Perl版本5.10.1上运行

到目前为止,我尝试了以下规则:

body SPAM44 /\p{Han}/
body SPAM44 /[\x{4e00}-\x{9FFF}]/
body SPAM44 /[一-俿倀-忿怀-濿瀀-翿耀-迿退-龥]+/
前两条规则根本不匹配。最后一条规则几乎匹配我所有的邮件。 所有这些规则在regex101.com上都很有效。所以这可能是Spamasassin特有的问题

应匹配的示例正文:

--_000_7f25887479e34b8585663e5702f9ae87companyde_
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64

6L2m6Lqr5Yi26YCg5bel6Im65Y+K6KOF5aSH44CB5rG96L2m5pW06L2m6K6+6K6h5byA5Y+R5LiO
6K+V5Yi244CB5rG96L2m5bel56iL5LiO5pyN5Yqh44CB5pm66IO95Lqn57q/54mp5rWB5oqA5pyv
44CB5raC6KOF55Sf5Lqn57q/5Y+K6KOF5aSH44CB5bel5Lia5py65Zmo5Lq65oiQ5aWX5oqA5pyv
5Y+K6KOF5aSH44CB5bqV55uY5Yi26YCg5bel6Im65Y+K6KOF5aSHDQoNCg0KDQoN
我无法发布解码的字符串,因为stackoverflow说这是垃圾邮件


那么如何将中文字符与spamassassin匹配呢?

除非您在本地配置中单独设置
normalize_charset 1
(默认值为0),否则spamassassin不会将字符集规范化为Unicode;然后,这些正则表达式匹配的可能性几乎为零

如果没有此设置,要匹配UTF-8中的汉字,正则表达式需要匹配字符的UTF-8序列,而不是解码的Unicode表示

body  SPAM44_UTF8 /[\xe4-\xe9][\x80-\xbf][\x80-\xbf]/
score SPAM44_UTF8 2
(对正则表达式不完全确定,但你知道了。)

这显然只适用于UTF-8中的正文,因此您需要为您想要处理的任何其他字符集(可能是GB2312?)编写一个类似的规则,并且它可能会对实际上不是UTF-8的消息正文产生误报(尽管这样做的风险似乎很小)

这个规则在任何地方都匹配一个汉字。也许你会想扩展它,寻找一个序列,比如说,四个或更多,以减少误报的风险


也许有一天,
normalize\u charset 1
将成为默认设置,但就目前的电子邮件状态而言,我认为这在短期内是行不通的。字符集信息丢失或不正确的情况太多了,自动修复字符集信息的启发式方法非常脆弱且容易出错。

您能发布完整的spamassassin配置行吗?更重要的是,您能发布一个具有代表性的原始主题:行和您试图匹配的精确规则吗?不,原始消息源,而不是您在邮件客户端中看到的。我添加了用于测试的原始正文部分。spamassassin是否查看附件内部?“spamassassin未将字符集规范化为Unicode”-规范化\u字符集配置选项不应提供它?