其实是介绍一个小软件 K9 ——大小不超过 100k 完全绿色软件。这个软件的工作方法是把自己运行成为一个 pop3 的应用级代理,然后利用 sbl、黑白名单、正则匹配的内容过滤和贝叶斯算法来分辨邮件是否为垃圾邮件。
所谓 sbl 就是一个 ip 地址列表,这个列表里面包含了大量被人举报过的垃圾邮件发送源 IP 地址。详细信息参考 http://www.spamhaus.org/
黑白名单就很容易理解了,就是列一个大名单,黑名单里面的就全部是垃圾邮件发送者,白名单就全是正常邮件发送者。
正则匹配的内容过滤,就是根据你指定的正则表达式进行内容过滤排除垃圾邮件。
贝叶斯算法我也不知道具体怎么弄,我只是知道他是一种人工智能的方法。可以自己学习,从而渐渐变得越来越聪明,越来越智能的过滤垃圾邮件。号称现在实现的最好的人工智能垃圾邮件过滤器能够达到 99% 以上的精确度。
这个是安装后的界面

这是配置界面
简单的说一下
选中 Use a "whitelist" filter
选中 Use a "blacklist" filter
激活黑白名单
选中 blackhole list 里面的 Use DNS blackhole list to help identify spam
激活 sbl
在 pop3 Server Check 里面填上你的 pop3 信息
account name 填 你的邮箱 其他的没什么好说的了

配置界面二
proxy 里面填上 在本地监听的端口(不用太担心安全问题,监听在 127.0.0.1)
在 Mark email as spam by .. 选择你如何标记垃圾邮件

然后修改你的邮件客户端
pop3 服务器地址改成 127.0.0.1 服务器端口改成 9110
用户名改成 servername/port /username
如果你的邮件地址是 aaa@bbb.com bbb.com 的邮件服务器是 pop.bbb.com 在 pop3 端口在 110
那你的用户名改成
pop.bbb.com/110/aaa
密码不用改,如果你是 OE 或者是 Outlook 可以在 Advanced 标签里面的 Automatic Email Program Configuration 自动配置
然后利用邮件客户端收取邮件,并且收取邮件的时候在 k9 的 Recent Emails 里面会出现你收下的邮件。然后你手动判断一下是否是垃圾邮件。下一次手法邮件的时候如果没有正常的标记垃圾邮件,你再修正一下。经过几次以后 k9 就会越来越聪明啦!
这是我的 k9 自动分拣的垃圾邮件。准确率还不错,达到了 90%左右。
k9 的好处——不会帮你删邮件,只是帮你分拣,你可以使用一个简单的规则就可以实现你想要的自动删除垃圾邮件的功能。这样就不会丢失邮件了。即使 k9 不能很好的判断。你也可以把它当作一个能够管理多邮箱的,同时删除多个邮箱的垃圾邮件。而且 k9 体积很小,占内存数量很小(及时使用 organize来整理)。
k9 的缺点——收邮件的时候会比不使用k9要慢一些。

http://bbs.mailsofts.com/index.php?showtopic=2331
一. 贝叶斯过滤算法的基本步骤
1) 收集大量的垃圾邮件和非垃圾邮件,建立垃圾邮件集和非垃圾邮件集。
2) 提取邮件主题和邮件体中的独立字串例如 ABC32,¥234等作为TOKEN串并统计提取出的TOKEN串出现的次数即字频。按照上述的方法分别处理垃圾邮件集和非垃圾邮件集中的所有邮件。
3) 每一个邮件集对应一个哈希表,hashtable_good对应非垃圾邮件集而hashtable_bad对应垃圾邮件集。表中存储TOKEN串到字频的映射关系。
4) 计算每个哈希表中TOKEN串出现的概率P=(某TOKEN串的字频)/(对应哈希表的长度)
5) 综合考虑hashtable_good和hashtable_bad,推断出当新来的邮件中出现某个TOKEN串时,该新邮件为垃圾邮件的概率。数学表达式为:
A事件----邮件为垃圾邮件;
t1,t2 …….tn代表TOKEN串
则P(A|ti)表示在邮件中出现TOKEN串ti时,该邮件为垃圾邮件的概率。
设
P1(ti)=(ti在hashtable_good中的值)
P2(ti)=(ti在hashtable_ bad中的值)
则 P(A|ti)= P1(ti)/[(P1(ti)+ P2(ti)];
6) 建立新的哈希表 hashtable_probability存储TOKEN串ti到P(A|ti)的映射
7) 至此,垃圾邮件集和非垃圾邮件集的学习过程结束。根据建立的哈希表 hashtable_probability可以估计一封新到的邮件为垃圾邮件的可能性。
当新到一封邮件时,按照步骤2)生成TOKEN串。查询hashtable_probability得到该TOKEN 串的键值。
假设由该邮件共得到N个TOKEN串,t1,t2…….tn, hashtable_probability中对应的值为P1,P2,。。。。。。PN,
P(A|t1 ,t2, t3……tn)表示在邮件中同时出现多个TOKEN串t1,t2…….tn时,该邮件为垃圾邮件的概率。
由复合概率公式可得
P(A|t1 ,t2, t3……tn)=(P1*P2*。。。。PN)/[P1*P2*。。。。。PN+(1-P1)*(1-P2)*。。。(1-PN)]
当P(A|t1 ,t2, t3……tn)超过预定阈值时,就可以判断邮件为垃圾邮件。
二. 贝叶斯过滤算法举例
例如:一封含有“ *** 功”字样的垃圾邮件 A
和 一封含有“法律”字样的非垃圾邮件B
根据邮件A生成hashtable_ bad,该哈希表中的记录为
法:1次
轮:1次
功:1次
计算得在本表中:
法出现的概率为0。3
轮出现的概率为0。3
功出现的概率为0。3
根据邮件B生成hashtable_good,该哈希表中的记录为:
法:1
律:1
计算得在本表中:
法出现的概率为0。5
律出现的概率为0。5
综合考虑两个哈希表,共有四个TOKEN串: 法 轮 功 律
当邮件中出现“法”时,该邮件为垃圾邮件的概率为:
P=0。3/(0。3+0。5)=0。375
出现“轮”时:
P=0。3/(0。3+0)=1
出现“功“时:
P=0。3/(0。3+0)=1
出现“律”时
P=0/(0+0。5)=0;
由此可得第三个哈希表:hashtable_probability 其数据为:
法:0。375
轮:1
功:1
律:0
当新到一封含有“功律”的邮件时,我们可得到两个TOKEN串,功 律
查询哈希表hashtable_probability可得
P(垃圾邮件| 功)=1
P (垃圾邮件|律)=0
此时该邮件为垃圾邮件的可能性为:
P=(0*1)/[0*1+(1-0)*(1-1)]=0
由此可推出该邮件为非垃圾邮件
Posted by sbilly at March 13, 2004 02:22 AM
| TrackBack