如何过滤纯文本垃圾邮件?求助正则表达式过滤方案
搞定纯文本带链接的漏网垃圾邮件:实用过滤思路
嘿,我之前也碰到过这种表面没规律但硬带链接的纯文本垃圾邮件,折腾了一阵总结了几个靠谱的方向,分享给你:
核心思路:抓链接的“猫腻”+ 文本的“反常”
这类邮件看似无迹可寻,但带链接是绕不开的核心特征,结合文本里的异常点组合过滤,比单一正则靠谱太多。
1. 死磕链接的可疑特征
垃圾邮件的链接几乎都有破绽,从这几个角度挖:
- 仿冒正规域名:
很多垃圾邮件会用字符替换模仿大厂域名,比如amaz0n.com(0代替o)、paypa1.com(1代替l),可以写正则匹配这类仿冒模式。比如针对亚马逊的:
另外,免费小众域名(比如\b(amaz[0o]n|amazon\.cn|amazon\.com)\b.tk、.ml、.ga这类)也是重灾区,维护个可疑后缀列表,用正则扫:https?://\S+\.(tk|ml|ga|cf|gq)\b - 诱导性参数/关键词:
链接里常带click、track、verify、redirect这类诱导跳转的词,或者一堆乱码参数,正则可以抓:https?://\S+(click|track|verify|redirect|unsubscribe)\S+ - 短链接跳转:
虽然正常短链接也不少,但垃圾邮件爱用bit.ly、tinyurl.com这类短链藏真实地址,结合前后的诱导文本(比如“点击领取”“立即查看”)一起判断:(点击领取|立即查看|限时优惠)\s*https?://(bit\.ly|tinyurl\.com)\S+
2. 捕捉文本的反常信号
纯文本垃圾邮件的文本细节里藏着很多线索:
- 高频诱导词汇堆砌:
反复出现“免费”“中奖”“返利”“限时”“紧急”这类词,密度远高于正常邮件,用正则匹配多个这类词的组合:\b(免费|中奖|返利|限时|紧急|领取|点击)\b.*\b(免费|中奖|返利|限时|紧急|领取|点击)\b - 无意义重复/语法混乱:
很多是机器生成的凑数内容,比如连续重复的词、不通顺的句子,正则可以抓重复模式:(\b\w+\b)\s+\1\s+\1 # 匹配连续重复三次的词汇 - 泛化称呼无个性化:
开头全是“尊敬的用户”“亲爱的朋友”这类没具体姓名的泛称,结合链接一起判断:^(尊敬的用户|亲爱的朋友|您好)\s.*https?://\S+
3. 组合规则,别用单一正则硬刚
单一正则很容易误杀正常邮件,建议用多规则加权的方式:
- 比如:链接匹配可疑域名(+3分)+ 文本包含2个以上诱导词(+2分)+ 无具体称呼(+1分),总分超过4分就标记为垃圾。
- 另外,一定要定期更新你的可疑域名和词汇列表,垃圾邮件的套路一直在变,得跟着调整。
4. 两个辅助小技巧
- 解析链接的真实跳转地址:很多短链背后是恶意域名,提取链接后解析真实地址,再用正则匹配黑名单域名。
- 统计链接数量:正常纯文本邮件很少带链接,甚至不带,如果一封纯文本邮件里有2个以上链接,直接拉高高可疑度。
内容的提问来源于stack exchange,提问作者G H
相关产品推荐
相关产品推荐

