Spamassassin正则表达式标题规则不起作用

时间:2018-02-12 11:56:41

标签: regex perl spamassassin

我是Spamassassin,regex和Perl的新手,所以我很感激一些帮助。我试图在发件人遵循某种模式的所有电子邮件中添加垃圾邮件分数,即: name.surname.@example.com。 这就是我想出来的

header NAME_DOT_SURNAME_DOT_FQDN From=~((?:[a-z]+))(\\.)((?:[a-z]+))(\\.)(@)((?:[a-z][a-z\\.\\d\\-]+)\\.(?:[a-z][a-z\\-]+))(?![\\w\\.])
score NAME_DOT_SURNAME_DOT_FQDN 3.0

然而,它似乎并没有起作用。当我运行spamassassin --lint时,我得到以下输出:

Feb 12 12:52:59.521 [32767] warn: Use of ?PATTERN? without explicit operator is deprecated at /etc/spamassassin/local.cf, rule NAME_DOT_SURNAME_DOT_FQDN, line 1.
Feb 12 12:52:59.522 [32767] warn: rules: failed to compile Mail::SpamAssassin::Plugin::Check::_head_tests_0_3, skipping:
Feb 12 12:52:59.522 [32767] warn:  (Unmatched ) in regex; marked by <-- HERE in m/: [...][a-z]+) <-- HERE )(\\.)((/ at /etc/spamassassin/local.cf, rule NAME_DOT_SURNAME_DOT_FQDN, line 1.)
Feb 12 12:52:59.620 [32767] warn: lint: 1 issues detected, please rerun with debug enabled for more information

运行spamassassin --lint -D只会生成包含相同错误的文本墙。 谁能指点我正确的方向?提前致谢。

1 个答案:

答案 0 :(得分:2)

我不知道SpamAssassin,但它是否需要围绕正则表达式/ /

因为错误消息表明Perl正在将?视为正则表达式分隔符,导致正则表达式为:

?:[a-z]+))(\\.)((?
#-------^ unmatched ')'

所以我尝试的是:

header NAME_DOT_SURNAME_DOT_FQDN From=~/((?:[a-z]+))(\\.)((?:[a-z]+))(\\.)(@)((?:[a-z][a-z\\.\\d\\-]+)\\.(?:[a-z][a-z\\-]+))(?![\\w\\.])/

此外,那些加倍的反斜杠看起来很可疑。你确定你的意思不是,例如\w代替\\w