使用getmail, procmail, spamassassin, mutt, msmpt, crontab处理邮件是一种宝刀屠龙,杀敌如麻,歇斯底里,快意恩仇的感觉!!!
话说书呆到底有几个邮箱书呆自己都不知道。 不夸张地说,书呆的邮箱可以划分为如下类别:
- 不得不有的邮箱:
- QQ邮箱,只要有QQ号就有QQ邮箱
- gmail邮箱,谁能扛得住“一个谷歌ID,所有的谷歌服务”?
- 微软邮箱,与微软office软件直接绑定的账号,不得不用
- 139邮箱,用手机就得有手机号,有手机号就有139邮箱
- 也许可以没有的邮箱:
- 学校域名邮箱,用来发表文章时所留邮箱或者申请github学生账号之类似乎不得不用,听说如果不用会有难以想象的额外麻烦
- 新浪、网易、雅虎、hotmail邮箱,似乎这些服务商的原始邮箱与其服务更兼容
- 自己想用的邮箱:
- 个人用的企业邮箱,一个企业邮箱就一个人用也是醉了,谁让是自己的域名呢?
- 由于强迫症而注册的邮箱:
- 126、163、yeah.net邮箱都注册了邮箱
- sina.com、sina.cn都注册了邮箱
- yahoo.com、yahoo.com.cn都注册了邮箱
- sogou邮箱、outlook邮箱等等完全没有必要注册的邮箱
这么多邮箱怎么逐一查看才好,于是把所有的邮箱统统都转发到一个容量比较大、比较稳定(有一天那啥邮箱登录不了,实在是吓到了)的邮箱。 结果就是乱七八糟的邮件全来了! 仔细观察,书呆的邮箱中的邮件可以分为如下极大类别:
- 广告
- 生活类广告
- 各种什么学术会议
- 通知和提醒
- 谷歌日历、github、微博、人人、多说、disqus之类的回复提醒、生日提醒
- 与各类账号操作相关的提醒,如改密码,初始账号等
- 学校通知
- 与朋友,老师等通信
- 临时传递文件
- 订阅的数据
- 手机话费等个人数据
- 一些数据库的变更内容
- 期刊的周报
- 垃圾邮件
以上就是各种有用的,没用的,既不有用也不没用的、有用的但不一定什么时候要看的、暂时有用过几天就没啥用的各类邮件。 怎么才能自动地处理这一堆垃圾呢?
举个例子,139邮箱提供每个月话费使用详情邮件,这类邮件对于书呆来说就是属于有用但不一定什么时候要看的邮件,一个很好的做法是单独将这类邮件放在各自独立的文件夹中便于在需要的时候查看分析。 使用procmail对getmail投递的邮件进行过滤,凡是从10086的139邮箱发来的邮件均发送到PHONEBILL文件夹。
:0
* ^From.*10086@139\.COM
PHONEBILL/
对于有用的、既不有用也不没用的、有用的但不一定什么时候要看的、暂时有用过几天就没啥用邮件,在邮箱中的重要邮件的排序需要符合以下规则:
- 标记为重要的邮件
- 时序规则:按照时间顺序当然越新的邮件越有时效性也就越重要、得分越高
- 有回复的邮件
- 指定域名发来的邮件:对于学生党,以
edu\..*
、edu\.cn
、hit\.edu\.cn
结尾的邮件应该得分高 - 通信录中的邮件
- 只发送给我的邮件
邮箱中不重要的邮件的需要符合以下规则:
- 含有
(AD)
字样的广告 - 含有邮件标题中含有诡异字符的邮件
综上,邮件的打分规则如下:
score ~A +10 # 初始分数
score ~F +50 # 标记为重要的邮件
score ~Q +20 # 回复的邮件
score ~U +2 # 未读邮件
score ~D =0 # 删除的邮件
score ~S =0 # 垃圾邮件
score ~= =0 # 重复邮件
score "~f (师座邮箱)" +20 # 师座发来的
score "~f wen_qi@hit.edu.cn" +20 # 秘书发来的
score "~f .*@.*.edu.*" +10 # 教育邮箱发来的
score ~d>3d -1 # 超过三天的邮件减分
score ~d>7d -1 # 递减
score ~d>14d -1
score ~m>1m -1
score ~m>2m -1
score ~m>3m -1
score ~y>1y -2
score ~y>2y -2
score ~y>3y -2 # 超过三年的邮件累计减12分
score "~s iphone" -5 # 这类都是垃圾
score "~s ^已读: " -5 # 已读通知
score "~s 测试消息$" -5
score "~s [^[:digit:],[:blank:],a-z,A-Z,\u4e00-\u9fa5]{1}" -1 # 有一个诡异字符减一分
score "~s [^[:digit:],[:blank:],a-z,A-Z,\u4e00-\u9fa5]{2}" -2
score "~s [^[:digit:],[:blank:],a-z,A-Z,\u4e00-\u9fa5]{3}" -3
score "~s [^[:digit:],[:blank:],a-z,A-Z,\u4e00-\u9fa5]{4}" -4
score "~s [^[:digit:],[:blank:],a-z,A-Z,\u4e00-\u9fa5]{5}" -5
score "~s [^[:digit:],[:blank:],a-z,A-Z,\u4e00-\u9fa5]{6,}" =0 # 诡异字符太多直接置零
score "~s \(AD\)" =0
score "~s 彩票"|"~s 中奖" =0
score "~s [[:digit:]]+折" =0
score "~s yanshuochu" =0
score "~s 【*月福利】*" =0
score "!~L .*yanshuo.*" =0
除此之外,还在procmail邮件过滤时添加垃圾邮件识别器(基于贝叶斯网络),除了默认的垃圾邮件规则还可以添加自定义规则。 一个比较好用的功能是,可以对标记被垃圾邮件的邮件进行学习,使识别器更加智能。 如下,procmailrc中定义的规则依次为:主题中带有Spam的直接删除,10086的139邮箱发来的电话账单邮件放到PHONEBILL文件夹,然后所有小于256k的邮件投递给垃圾邮件识别器进行识别,识别出来的不同级别的垃圾邮件分别放在不同的文件夹,非垃圾邮件投递到默认的邮件文件夹。
:0
* ^Subject:.*Spam
/dev/null
:0
* ^From.*10086@139\.COM
PHONEBILL/
:0fw: spamassassin.lock
* < 256000
| spamassassin
:0:
* ^X-Spam-Level: \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*
almost-certainly-spam/
:0:
* ^X-Spam-Status: Yes
probably-spam/
:0
* ^^rom[ ]
{
LOG="*** Dropped F off From_ header! Fixing up. "
:0 fhw
| sed -e '1s/^/F/'
}
:0
* .*
$DEFAULT/
不得不用的大杀器是进行人工检查的同时训练垃圾邮件分类器,只需要在muttrc中定义如下学习和测试宏:
macro index ,s "<enter-command>unset wait_key\n<pipe-entry>sa-learn --spam\n<enter-command>set wait_key\n<save-message>~/.mail/spam/\n" "Tags a given message as SPAM"
macro index ,u "<pipe-entry>sa-learn --ham\n<enter-command>set wait_key\n<save-message>~/.mail/Inbox/\n" "Untags a given message as SPAM"
macro index ,t "<pipe-entry>spamassassin -t\n<enter-command>set wait_key\n" "Tests a given message to see if it is SPAM"