我希望编写一个SpamAssassin规则,如果电子邮件包含消息正文中特定字符的n以上,就会匹配该规则。 不一定连续。 例如,如果消息中总共有十个星号,则匹配该规则。
如果有十个连续的星号,我知道如何写规则,如下所示:
body TEN_ASTERISKS /(**********)/ score TEN_ASTERISKS 0.5 describe TEN_ASTERISKS Message body contains ten asterisks.
我将如何重新编写匹配十个星号的规则,而不一定是连续的?
上述规则格式不正确,不起作用。
SpamAssassin规则是正则expression式 ,所以你只需要逃避那些:
body TEN_ASTERISKS /\*\*\*\*\*\*\*\*\*\*/ score TEN_ASTERISKS 0.5 describe TEN_ASTERISKS Message body contains ten asterisks.
而且,括号是不必要的。 他们形成一个存储在内存中的捕获组 ,假设你看到很多星号缠绕的邮件可能会对你的服务器产生影响。
(你也可以做body TEN_ASTERISKS /\*{10}/但是我想做一个简单的例子,正则expression式非常强大。)
要匹配十个单独的星号,您需要tflags multiple :
body __HAS_ASTERISK /\*/ tflags __HAS_ASTERISK multiple maxhits=11 meta TEN_ASTERISKS __HAS_ASTERISK > 10 score TEN_ASTERISKS 0.5 describe TEN_ASTERISKS Message body contains ten asterisks.
maxhits=11是一个优化。 它告诉SpamAssassin停止计数( tflags multiple是昂贵的运行)。