要解决新的 TLD 问题,您确实需要一个正文规则。正如您在上面所写的,存在一些语法问题和一些不必要的计算成本。试试这个:
body YELLO_LONG_BODY_URL m@\bhttps?://[^\"\'<\s$]{100}@i
describe YELLO_LONG_BODY_URL 100+ char URL, https://stackoverflow.com/a/26919318
score YELLO_LONG_BODY_URL 0.1
这在技术上是可行的,但我相信你会发现它会触发大量非垃圾邮件,尤其是营销邮件,尤其是如果你将绑定保持在 100 个字符(这太小了!)。我去掉了逗号和分号,因为它们可能是 URL 的一部分,而合法消息的 URL 长度只有一个字符太长,所以你可能只需要m@\bhttps?://\S{100}@i
警告:我以打击垃圾邮件为生,触手可及的数据很多。与 128 个字符以下的垃圾邮件相比,您会遇到更多的非垃圾邮件(“ham”)。没有大小范围会有非常好的垃圾邮件:火腿比例;0.900的S/O(又名precision)可能是可以接受的,但您确实希望更接近 1.000。根据我的测试,最好的范围是 192-256 个字符,但即使这样也太弱了(S/O = 0.862)而不能非常有用。使用超过 1024 个字符的链接(S/O = 0.057)几乎没有垃圾邮件。
我更改了此规则的名称。将您的规则归功于您的规则是很好的,这样当出现问题并且“信用”变成“责备”时,它们可以很容易地被识别为您的(而不是上游 SpamAssassin 的)......我什至在规则描述中链接了这个答案,以便您的用户可以了解更多。