基于ASP的反垃圾邮件管理系统的设计与实现

随着Internet的迅速普及,电子邮件以其快捷、方便、低成本的特点逐渐成为人们进行信息交流的主要媒介之一,但是随之而来的垃圾邮件也越来越泛滥。垃圾邮件占用了有限的存储、计算和网络资源,耗费了用户大量的处理时间,影响和干扰了用户的正常工作、生活和学习。如何有效地治理垃圾邮件是全世界共同面临的一道难题,也是互连网上目前有待解决的问题。本文首先介绍了电子邮件对人们日常生活的重要性,然后概要介绍了反垃圾邮件技术的发展历史。研究了三种过滤垃圾邮件的方法,分别是黑白名单技术、主题关键字过滤技术和贝叶斯策略,对这三种技术的设计方法做了说明,重点介绍了贝叶斯过滤技术的设计原理和实现步骤。最后总结了这几种过滤技术的不足之处和设计中遇到的难点问题。

随着Internet的极度膨胀,给人们带来了大量的信息,电子邮件使人们感受到快捷和方便,更已成为一种最快速经济的通信手段,但是互联网又是一个无政府世界,有些人利用电子邮件肆意散发邮件广告,造成很多人的邮箱垃圾成堆,有些人利用电子邮箱制造邮件炸弹,使电子邮件服务器瘫痪;更有甚者利用电子邮件来传播病毒。如此种种给许多用户带来了无尽的困扰。因此对垃圾邮件进行有效的过滤,已经成为了一个有重要意义的现实问题。目前,我国对垃圾邮件过滤研究中语义分析和文本分类方面的技术还比较落后,导致国内很多大型的电子邮件系统无法及时有效地发现和拒绝垃圾邮件,从而给用户造成巨大的伤害。更为严重的是国外很多垃圾邮件制造者利用这一缺陷,通过中国的邮件服务器发送垃圾邮件,致使很多国外ISP服务提供商封锁了中国邮件服务器的IP地址,给中国用户造成很多精神和经济损失。随着中国经济与世界经济的关系日益紧密,中外交流活动的逐渐增多,对外的电子邮件数量也急剧增加,如果中国电子邮件由于垃圾邮件问题遭到全面封杀,必将会对国内企业和组织造成巨大影响,严重组碍中国经济的发展。因此,对新的,可靠的垃圾邮件过滤技术的研究已经成为一项紧迫任务。

1.2 开发概述

1.2.1电子邮件概述

电子邮件表示通过电子通讯系统进行信件的书写、发送和接收。今天使用的最多的通讯系统是互联网,同时电子邮件也是互联网上最受欢迎的功能之一。通过电子邮件系统,您可以用非常低廉的价格,以非常快速的方式(几秒钟之内可以发送到世界上任何你指定的目的地),与世界上任何一个角落的网络用户联络。同时,您可以得到大量免费的新闻、专题邮件,并实现轻松的信息搜索。这是任何传统的方式也无法相比的。正是由于电子邮件的使用简易、投递迅速、收费低廉,易于保存、全球畅通无阻,使得电子邮件被广泛地应用,它使人们的交流方式得到了极大的改变。每一个申请互联网帐号的用户都会有一个电子邮件地址。它是一个很类似于用户家门牌号码的邮箱地址,或者更准确地说,相当于你在邮局租用了一个信箱。因为传统的信件是由邮递员送到你的家门口,而电子邮件则需要自己去查看信箱,只是您不用跨出家门一步。电子邮件来源于专有电子邮件系统。早在互联网流行以前很久,电子邮件就已经存在了,是在主机-多终端的主从式体系中从一台计算机终端向另一计算机终端传送文本信息的相对简单的方法而发展起来的。

经历了漫长的过程之后,它现在已经演变成为一个更加复杂并丰富得多的系统,可以传送声音、图片、图像、文档等多媒体信息,以至于如数据库或帐目报告等更加专业化的文件都可以以电子邮件附件的形式在网上分发。

1.2.2反垃圾概述

 “垃圾邮件”多指未经请求而发送的电子邮件,也可以是发送给与信件主题不相关的新闻组或者列表服务器的同一信件的重复邮件。国内外的技术专家和反垃圾邮件组织对“垃圾邮件”的定义如出一辙:批量发送的未征得收信人同意的电子邮件。 这些电子邮件虽然每封的信息量不一定很大,但是邮件内容不是大多数用户需要甚至是令大多数用户讨厌的。铺天盖地的宣传邮件不仅侵犯了用户的私人空间,而且干扰了大多数用户正常使用电子邮件功能,同时给用户带来了上网时间和上网资金上的浪费,因此被称为“垃圾邮件”。国际互联网上的常见名词SPAM、UCE(Unsolicited Commercial Email不请自来的商业电子邮件)和UBE(Unsolicited Bulk Email不请自来的批量电子邮件)与通常所称的垃圾邮件是一样的。反垃圾邮件技术的研究是一项长期而艰巨的任务,经历了以下几个时代:

表1-1 反垃圾邮件的历史

第一代

第二代

第三代

第四代

基础MTA控制

实时黑名单

贝叶斯过滤

多技术整和分层过滤

白名单和黑名单

电子签名

人工智能

简单的关键字搜索

机器语言学习

信件头测试

标题过滤

简单的DNS测试

当前的反垃圾邮件技术可以分为4大类:过滤器(Filter)、反向查询(Reverse lookup)、挑战(challenges)和密码术(cryptography),这些解决办法都可以减少垃圾邮件问题,但是都有它们的局限性。其中过滤又包括关键词过滤、黑白名单、HASH技术、基于规则的过滤、智能和概率系统、贝叶斯算法,验证查询技术分为反向查询技术、DKIM技术、SenderID技术、FairUCE技术,挑战分为挑战-响应、计算性挑战。

  1. 电子邮件的工作原理

2.1 电子邮件的结构

电子邮件可视为半结构化的文本文件。RFC822 明确的把邮件划分为两部分:第1 部分称为邮件头,邮件头中包含若干数据字段,其作用是标识邮件的重要部分,例如发送者、接收者、主题和注释。邮件头字段应出现在邮件体之前,两部分间使用一个空行分隔。第2 部分就是邮件体(body),邮件体(body)是发送用户发给接收用户邮件的内容。

2.2 电子邮件的传输

电子邮件与普通信件有类似的地方,发信者注明收件人的姓名与地址(即邮件地址),发送方服务器把邮件传到收件方服务器,收件方服务器再把邮件发到收件人的邮箱中,如下图所示:

电子邮件系统主要由以下3 部分组成:MUA (Mail UserAgent),邮件用户代理,是帮助用户读和写邮件;MTA (MailTransport Agent),邮件传输代理,负责将邮件从一个服务器传到另一个服务器;MDA(MailDeliveryAgent),邮件投递代理,将邮件分发到用户的邮箱里。整个邮件传输过程如下图所示:

 

  1. 需求分析

3.1 数据库需求分析

该系统采用Microsoft SQL Server 2000数据库,数据库的名称mail。对系统功能的分析绘制了系统总体E-R图,如图3-1所示:

为了消除数据的冗于在表中采取了主关键字。根据数据库功能模块的不同,所做需求分析的不同建立了以下表,它们分别是:

  1. 用于保存邮件夹内邮件信息的数据表,具体设计如表3-1所示:

表3-1 mail数据表

字段名称

字段说明

字段类型

主关键字

mailitem

邮件编号

int

*

mailfrom

发件人地址

varchar

mailto

收件人地址

varchar

maildate

发件日期

datetime

mailsubject

邮件主题

varchar

mailbody

邮件内容

varchar

  1. 用于保存所添加的黑白名单邮件地址的数据表,具体设计如表所示:

表3-2 black_mailadd数据表

字段名称

字段说明

字段类型

主关键字

ID

编号

int

*

Mailadd

黑名单邮件地址

varchar

表3-3 white_mailadd数据表

字段名称

字段说明

字段类型

主关键字

ID

编号

int

*

Mailadd

白名单邮件地址

varchar

  1. 用于保存用户添加的主题关键字的信息表,具体设计如表所示:

表3-4 key_word数据表

字段名称

字段说明

字段类型

主关键字

ID

编号

int

*

word

被过滤的关键字

varchar

  1. 贝叶斯过滤所要用到的数据表,具体设计如表所示:

表3-5 drop_word数据表

字段名称

字段说明

字段类型

主关键字

ID

编号

int

*

word

不做分析的常用字

varchar

表3-6 bayes_field数据表

字段名称

字段说明

字段类型

主关键字

ID

编号

int

*

value

阈值

int

表3-7 hash_all数据表

字段名称

字段说明

字段类型

主关键字

ID

编号

int

*

token

独立字串

varchar

good_time

出现在合法邮件中次数

int

good_pro

出现在合法邮件中概率

float

bad_time

出现在垃圾邮件中次数

int

bad_pro

出现在垃圾邮件中概率

float

表3-8 hash_pro数据表

字段名称

字段说明

字段类型

主关键字

ID

编号

int

*

token

独立字串

varchar

token_pro

垃圾邮件综合概率

float

3.2 开发环境需求

安装此系统所需的基本软、硬件环境为:

  1. Windows95、 Windows98 或WindowsNT/2000/XP。
  2. Microsoft SQL Server 2000数据库
  3. Pentium100及以上档次的IBM PC及其兼容机。
  4. 128M以上内存。
  5. 5000M以上可用硬盘空间。
  6. 高密软盘驱动器。
  7. VGA显示器。
  8. CD——ROM驱动器。
  9. 本程序在Windows2000 Professional操作系统下,以中文Dreamweaver MX 2004为前台开发工具,用中文版Microsoft SQL Server 2000数据库为后台数据库。

  1. 系统功能和技术描述

4.1 系统功能模块设计

本系统分为三个大模块,每个大模块下有不同的功能划分,模块结构图如图4-1所示:

 

  1. 日常操作模块

这个模块分为收邮件和写邮件两部分,用户可以通过这个模块收发电子邮件,完成正常邮件和垃圾邮件的接收,本系统是采用从本地数据库读取数据,为反垃圾技术的研究提供测试环境。

  1. 邮件夹

此模块建立了两个文件夹,分别是收件夹和垃圾邮件夹,经过过滤的正常邮件显示在收件夹中,过滤后得到的垃圾邮件显示在垃圾邮件夹中。并可以对邮件进行删除和查看操作。

  1. 垃圾邮件过滤

此模块是本设计的核心部分,采用了黑名单、白名单、主题关键字、贝叶斯过滤技术来过滤垃圾邮件,用户可以通过过滤设置来启动和停止这些过滤规则。

4.2基本功能

通过黑名单、白名单、主题关键字、贝叶斯过滤技术完成客户端的垃圾邮件过滤,每个过滤规则在对邮件进行处理判断后,若可以确定邮件的属性,即为垃圾邮件或非垃圾邮件就可以直接把邮件显示在垃圾邮件夹和收件夹。客户端垃圾邮件过滤模型如下图所示:

4.3黑白名单技术

黑名单是一个简单有效最常用的过滤方法,它首先检查邮件头,如果发送者在黑名单内,就拒绝接收该邮件。黑名单可以是发送垃圾邮件的服务器、开放的代理、开放的中继以及发送者邮箱地址。现在有很多组织都在做*bl(block list),将那些经常发送垃圾邮件的IP地址(甚至IP地址范围)收集在一起,做成block list。

白名单过滤的方法是在邮件过滤系统中维持一张白名单表,其中收录了用户认可的邮件地址。当收到的邮件其发送者在用户的白名单中,该邮件就被判定为正常邮件。这种方法能100%的屏蔽垃圾邮件,但是同时也会过滤掉很多第一次与收件人通信的正常邮件,而这些用户不在收件人的白名单中。

目前很多邮件接收端都采用了黑白名单的方式来处理垃圾邮件,包括MUA和MTA,当然在MTA中使用得更广泛,这样可以有效地减少服务器的负担。本文中黑名单和白名单分别是已知的垃圾邮件发送者或可信任的邮件发送者的邮件地址,这种技术手段是最传统的方式,它通过黑名单技术对垃圾邮件进行屏蔽,通过白名单技术对允许的邮件进行放行。

4.4 关键字过滤技术

这种技术是根据在邮件头、邮件主题或者邮件正文中是否含有设定的关键字符来判断邮件是否为垃圾邮件,然后采取处理措施。这种技术非常简单易行,现在的邮件客户端一般都提供这种技术。根据调查显示,采用基于关键字符技术的邮件过滤器能够捕获到60%的垃圾邮件。但是这种当邮件中含有某类的关键字符时就判定邮件为垃圾邮件的技术缺点非常致命,它的误确认率特别高。例如将单词"free"设置为过滤关键字,那么所有包含有这个单词的邮件都会被过滤掉,不管这封邮件来自于你的朋友还是垃圾邮件制造者。本文中是设置要过滤的邮件标题关键字,对标题中含有这些关键字的邮件进行过滤。

4.5 贝叶斯过滤技术

4.5.1贝叶斯过滤算法的基本步骤

第一步:通过收集大量的邮件,按规则分为垃圾邮件和非垃圾邮件,建立垃圾邮件集和非垃圾邮件集,相当于两个数据库;

第二步:提取邮件主题和邮件正文中的独立字串,如商品、易趣等作为TOKEN串,并统计提取出的TOKEN串出现的次数,即字频,按照上述方法分别处理垃圾邮件集和非垃圾邮件集中的所有邮件;

第三步:每一个邮件集对应一个哈希表,hashtable_good对应非垃圾邮件集而hashtable_bad对应垃圾邮件集。表中存储TOKEN串到字频的映射关系。如下所示:

TOKEN串         出现次数

商品                N1

易趣                N2

法轮功              N3

色情                N4

第四步:计算每个哈希表中TOKEN串出现的概率 P={(某TOKEN串的字频)/(对应哈希表的长度)};

第五步:综合考虑hashtable_good和hashtable_bad,推断当新来的邮件中出现某个TOKEN串时,该邮件作为垃圾邮件的概率。存在事件S:该邮件为垃圾邮件,t1­­­ t2 …,tn代表TOKEN串,则P{S/ti}表示在邮件中出现TOKEN串ti时,该邮件为垃圾邮件的概率。

第六步:建立新的哈希表 hashtable_probability存储TOKEN串ti到P{S/ti}的映射,如下所示:

TOKEN串         垃圾邮件的概率

商品                P{S/t1}

易趣                P{S/t2}

法轮功              P{S/t3}

色情                P{S/t4}

重复此步骤直到得到出现某字串的邮件为垃圾邮件的概率,垃圾邮件集和非垃圾邮件集的学习过程就算结束了。根据建立的哈希表hashtable_probability可以估计一封新到的邮件为垃圾邮件的可能性,当新到一封邮件时,按照步骤生成新的TOKEN串,查询hashtable_probability得到该TOKEN串的键值。假设由该邮件共得到N个TOKEN串,t1t2t3…tn ,则hashtable_probability中对应的值为P1, P2, P3, …Pn, P{S/t1,t2,t3,…tn}表示在邮件同时出现多个TOKEN串t1,t2,t3,…tn时,该邮件为垃圾邮件的概率,由复合概率公式可得:

P{S/t1t2t3…tn}=(P1 * P2*…* Pn)/[P1 * P2*…* Pn + (1- P1 )*(1- P2)*…*(1- Pn)],当P{S/t1,t2,t3,…tn }超过预定阈值时,就可以判断该邮件为垃圾邮件。

4.5.2贝叶斯过滤算法举例

例如:一封含有“法轮功”字样的垃圾邮件 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

由此可推出该邮件为非垃圾邮件。

4.5.3贝叶斯过滤模块划分

针对贝叶斯过滤的流程以及其所需要的功能,可以把整个过滤从功能上分为邮件预处理、贝叶斯算法实现、数据库访问、过滤主逻辑几个主要模块,系统结构如下图所示:

 

邮件预处理模块:这个模块主要负责读取邮件,对邮件进行编解码,去html的tag等;

贝叶斯算法模块:这个模块主要的功能是对邮件文本向量化,统计特征向量词出现的次数,分类器的训练、调整、更新,新邮件的过滤等;

数据库访问模块:在文本向量化,统计频率和计算概率时需要访问数据库,这个模块主要对数据库进行访问操作;

过滤主逻辑模块:这个模块负责调用其余各个模块的功能,实现垃圾邮件过滤处理的主逻辑。

  1. 系统工作流程和详细设计

5.1 系统工作流程图

系统服务工作流程图如图5-1所示:

5.2邮件统计设计

进入反垃圾邮件管理系统就可直观的显示收件夹和垃圾邮件夹中邮件的数目,并可点击进入浏览邮件,如果各种过滤策略启动,收到的邮件满足黑名单、关键字、贝叶斯过滤的条件,不满足白名单过滤的条件将会被显示在垃圾邮件夹里,正常邮件会被显示在垃圾邮件夹里,邮件统计界面如图5-2所示:

5.3收件夹设计

被过滤后的正常邮件被显示在收件夹内,显示了寄件人、日期和邮件主题,可对邮件进行删除和内容查看操作。如图5-3所示:

 

5.4反垃圾功能设计

5.4.1黑白名单过滤

此部分完成黑白名单的添加、修改、删除操作,如果收到黑名单中的地址发来的邮件就进行过滤显示在垃圾邮件夹里,如果收到白名单中的地址发来的邮件就直接显示在收件夹内,黑名单界面如下图所示:

 

黑名单过滤的代码如下:

rem 通过黑名单过滤

function black_leach(add)

sqlb = "select * from black_mailadd where mailadd= '"&add &"'"

set rsb = server.CreateObject("adodb.recordset")

rsb.open sqlb,conn,1

if rsb.eof then

black_leach="true" ' 不在黑名单里,不被过滤

else

black_leach="false"  '在黑名单里,被过滤

end if

rsb.close

set rsb=nothing

end function

5.4.2主题关键字过滤

主题关键字添加界面:

 

完成主题关键字的添加后,如果收到的邮件标题中含有要过滤的关键字就显示在垃圾邮件夹中,方便用户有选择的查看和删除,添加完成后出现以下界面,可以向数据库中添加、修改、删除主题关键字,如图所示:

 

 

主题关键字过滤核心代码如下:

rem 对标题进行分词,并查询单词中是否有被过滤的关键字:subjectleach

function sub_leach(strf)

dim strtemp

strf=Trim(strf)

strf=strf&" "

strtemp=""

for i =1 to len(strf)

if mid(strf,i,1)<>" " then

strtemp=strtemp&mid(strf,i,1)

else

sqls="select * from key_word where word= '"& strtemp &"'"

set rss = server.createobject("adodb.recordset")

rss.open sqls,conn,1,1

if not rss.eof then

sub_leach="false" '含有关键字,被过滤

exit function

else strtemp=""

end if

end if

next

sub_leach="true" '不含有关键字,不被过滤

end function

5.4.3贝叶斯过滤

此部分完成贝叶斯过滤阈值的设定、非垃圾邮件样本集和垃圾邮件样本集的学习,并生成哈希概率表,如果收到一封邮件,计算得到的垃圾邮件概率大于预先设定好的阈值,就把它显示在垃圾邮件夹中,阈值设置和非垃圾邮件样本集学习的界面如下:

 

  1. 对非垃圾邮件集进行分词,并进行词频计算的代码如下:

sqld="select * from drop_word where word= '"& strtemp &"'"

set rs = server.createobject("adodb.recordset")

rs.open sqld,conn,1,1

if rs.eof then '不在drop-word里

rs.close

sqlh="select token,good_time from hash_all where token= '"& strtemp &"'"

rs.open sqlh,conn,1,3

if rs.eof then'添加到hash表里,

conn.execute" insert into hash_all(token,good_time) values('"&strtemp&"','1')"

rs("good_time")=rs("good_time")+1 'rs(good_time)的值加1

  1. 计算非垃圾邮件集中各token串出现的概率的代码如下:

set rs = server.createobject("adodb.recordset")

sql="select good_time,good_pro from hash_all where good_time<>0"

rs.open sql,conn,1,3

r_t=rs.recordcount

do until rs.eof

i=rs("good_time")/r_t

i=int(i*1000)/1000

rs("good_pro")=i

rs.update

  1. 构造hash_pro表的代码如下:

function make_pro

set rss=server.CreateObject("adodb.recordset")

sqls="select token,good_pro,bad_pro from hash_all "

rss.open sqls,conn,1,3

do until rss.eof

str=rss("token")

i=rss("bad_pro")/(rss("bad_pro")+rss("good_pro"))

i=int(i*1000)/1000

conn.execute "insert into hash_pro values('"&str&"','"&i&"')"

rss.movenext

loop

rss.close

end function

5.4.4过滤参数设置

此模块可以启动和停止过滤策略,对四种过滤规则进行设定,界面如图5-14所示

 

  1. 测试与分析

6.1系统测试

  1. 黑白名单功能测试:在黑名单中加入要过滤的邮件地址,在白名单中加入允许放行的邮件地址,启动黑白名单功能,发送两封邮件,前一封邮件地址在黑名单中,后一封邮件地址在白名单中,发信人是前者的邮件被显示在垃圾邮件夹中,发信人是后者的邮件被显示在收件夹中,测试成功。
    1. 主题关键字过滤测试:添加要过滤的关键字,启动主题关键字过滤功能,发送一封标题中含有过滤关键字的邮件,该邮件被显示在垃圾邮件夹里,测试成功。
    2. 贝叶斯过滤测试:启动贝叶斯过滤功能,在文本1.txt中写入非垃圾邮件样本集,在文本2.txt中写入垃圾邮件样本集,对1.txt和2.txt进行学习,分析计算得到哈希概率表,发送一封含有这两个样本集字串的邮件,设定一个阈值,垃圾邮件概率超过这个阈值邮件被显示在垃圾邮件夹里,小于这个阈值邮件被显示在收件夹里,测试成功。测试中我在1.txt中写入了fa、lv两个字串,在2.txt中写入fa、lun、gong三个字串,经过学习得到下图所示的数据表:

 

 

当发送一封邮件内容是fa lun mail的邮件时,计算得到的垃圾邮件概率大于预先设定的阈值95,该邮件被显示在垃圾邮件夹中。点击邮件浏览界面中对邮件进行bayes分析的按钮可以显示bayes分析的各项指标,如下图所示:

 

6.2设计中的难点问题

1.对系统中需要使用的过滤参数进行集中的管理和配置。主要包括以下两个方面的内容:

(1)提供用户界面给用户修改相关参数,以完成个性化定制。

(2)在系统的使用过程中,考虑到用户的实际情况,应该方便的允许用户随时开启或关闭邮件过滤功能。

针对此问题我设计了一个参数设置模块来根据用户的需要开启关闭不同的过滤规则。

  1. 特征串的选取

特征串选取好坏将决定最终的过滤效果。特征串词库不是静态建立的,而是根据垃圾邮件集和非垃圾邮件集动态变化的,这样才能保证其一定的智能性和不断的学习能力。因此需要考虑多种情况,准确的提取垃圾邮件集合和非垃圾邮件集合中的特征信息,从而建立比较完善的特征串词库。对英文邮件,token串的选取不能仅简单的以单词为分解目标。而应该考虑到各种变化的情况,比如字母大小写 ,字母的异化。

6.3三种过滤技术分析

黑白名单技术占用较少的计算机资源,易于实施,但需要手动维护邮件地址清单,此方案在成熟的垃圾邮件解决方案中只起补充作用。

关键字过滤是一个简单但是有效的阻断绝大多数垃圾邮件的方法,其优点是简单易构造、易实现、可靠性高。而缺点是:必须经常对关键字进行更改和产生较多误报的情况。

贝叶斯算法在实际应用中需注意的方面:

  1. 纯粹的贝叶斯算法过滤只考虑了邮件正文的内容,而往往邮件头部的一

些信息是很重要的,因此必须把邮件头部的不同组成部分出现的TOKEN标识出来,且其权重设置为较大值。

  1. 在遇到某些特殊邮件时要根据这些网页的具体特征去判断这些邮件的合法性,例如在某个邮件中邮件正文很少,除此之外就只有一个网页的链接,那么这封邮件就很有可能是垃圾邮件。
  1. 由于正常邮件被误判断为垃圾邮件很有可能给用户带来极大的损失,因此必须采取方法降低正常邮件的误判。这里可以采取二级过滤规则的策略,即在一封邮件被判断为垃圾邮件以后还可以利用别的过滤规则对其再次进行判断,若符合某些条件则把其判为非垃圾邮件。
    1. 由于贝叶斯算法在电子邮件中的应用是由使用英语的人提出来并按照英语的语法习惯处理TOKEN串的,所以,当把他们应用到汉字处理或者其他并不和英语类似的语言时就会产生许多问题。这里也不具备对中文的识别,因为中文的分词算法比较复杂,准确率不高。

6.4通用模块分析

本系统中包括一些通用模块,这些模块以文件的形式保存,可以在其他文件中使用#include语句包含这些模块,使用其中定义的功能。比如:

conn.asp 实现到数据库的连接,代码如下:

<%

set conn=server.CreateObject("adodb.connection")

set rs=server.createobject("adodb.recordset")

set subrs=server.createobject("adodb.recordset")

str="PROVIDER=SQLOLEDB;DATA SOURCE=127.0.0.1;UID=sa;

PWD=123;DATABASE=mail"

conn.open str

%>

结    论

在设计过程中,我深刻认识到了反垃圾邮件技术研究的重要性,它对我们的工作和生活都产生着巨大的影响。我也对目前所应用到的各种反垃圾技术做了全面的了解,最后选择了三种常见的技术进行了功能设计,它们分别是黑白名单技术、主题关键字过滤技术、贝叶斯过滤技术,本文就围绕这三种技术做了详细说明并阐述了开发过程,希望通过这三种技术提高垃圾邮件的过滤率。但是由于现在很多垃圾邮件发送者也在利用各种过滤技术的漏洞发送垃圾邮件,要想做到百分之百的过滤垃圾邮件是一件不可能的事,在设计中使用的三种过滤技术也存在着各自的缺陷,还有很多难点问题,比如黑白名单地址的选取,主题关键字的选取,贝叶斯垃圾邮件集和非垃圾邮件集的搜集。当然还有很多更高效的过滤技术有待我们去研究,控制和消除垃圾邮件也不是几个人或几个组织就可以完成的,它需要全社会的共同努力,来建立一个洁净的网络空间。

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/5429.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

程序员OKR学习法

版权声明 本文原创作者&#xff1a;谷哥的小弟作者博客地址&#xff1a;http://blog.csdn.net/lfdfhl OKR管理法 OKR&#xff08;Objectives and Key Results&#xff09;管理法是一种目标管理方法&#xff0c;旨在通过制定明确的目标和可量化的关键结果来帮助组织、团队和个人…

RocketMQ的架构图

文章目录RocketMQ 技术架构中有四大角色 NameServer 、Broker 、Producer 、Consumer 。我来向大家分别解释一下这四个角色是干啥的。 Broker&#xff1a; 主要负责消息的存储、投递和查询以及服务高可用保证。说白了就是消息队列服务器嘛&#xff0c;生产者生产消息到 Broker…

Hive实战 --- 电子商务消费行为分析

目录 数据结构 Customer表 Transaction表 Store表 Review表 上传数据 创建目录用于存放数据 把本地文件上传到HDFS上 创建外部表 创建数据库 创建表 数据清洗 对transaction_details中的重复数据生成新ID 过滤掉store_review中没有评分的数据 找出PII (personal …

【web前端初级课程】第八章 什么是事件?

目录 一、事件情况汇总 二、标签绑定 三、使用DOM0事件模型 四、使用DOM2事件模型 五、相关练习&#xff1a;图片切换 一、事件情况汇总 事件分为三部分&#xff1a;事件源&#xff1a;绑定事件的标签、事件对象&#xff1a;就是事件产生的相关数据、事件处理函数 二、标…

Java使用功能方法交换a,b的值,通过构造方法输出姓名、年龄、家庭地址

目录 前言 一、使用功能方法交换a&#xff0c;b的值 1.1运行流程&#xff08;思想&#xff09; 1.2代码段 1.3运行截图 二、通过构造方法输出姓名、年龄、家庭地址 1.1运行流程&#xff08;思想&#xff09; 1.2代码段 1.3运行截图 前言 1.因多重原因&#xff0c;所以我…

愚人节,聊聊那些正在坑人的“新型AI”

几年前的一个愚人节&#xff0c;我们和大家聊过AI技术被作为诈骗工具的情况。很不幸&#xff0c;当时讨论的一些苗头&#xff0c;现在都成了电诈犯罪中屡见不鲜的手段。更可气的是&#xff0c;随着AI技术与应用本身的发展&#xff0c;犯罪分子的AI手段不减反增。一些“新型AI”…

(七)Tomcat源码阅读:Host组件分析

一、概述 Host类中比较重要的类就是HostConfig其它类实现的功能和之前的组件差不多&#xff0c;这里就不多介绍了。 二、阅读源码 1、HostConfig &#xff08;1&#xff09;重要方法 lifecycleEvent&#xff1a; 根据对应的方法设置对应的属性&#xff0c;并调用对应的方…

自己写gpt的软件教程-国内最好的chatgpt软件

GPT-3是一种非常强大的自然语言处理技术&#xff0c;可以为用户生成高质量的文本内容。虽然GPT-3最初是为英文而设计的&#xff0c;但是近年来&#xff0c;GPT-3在中文领域也变得越来越流行。在本篇教程中&#xff0c;我们将详细介绍如何在GPT-3中生成中文内容。 一、准备工作 …

第二天并发篇

一、线程状态 1.新建&#xff08;New&#xff09;&#xff1a;创建线程对象时 2.就绪&#xff08;Runnable&#xff09;&#xff1a;线程调用start方法&#xff0c;有执行资格没有执行权 3.运行&#xff1a;当就绪状态时抢到cpu的执行权之后&#xff0c;进入运行状态 4.阻塞&am…

过程控制系统中的模块技术MTP

在过程自动化行业中&#xff0c;模块化设备概念近年来越来越受欢迎。其中最热门的是MTP。MTP称为模块类型封装&#xff0c;它是过程工业自动化技术用户协会&#xff08;NAMUR&#xff09;提出的过程自动化行业的模块化标准&#xff0c;通过这种模型&#xff0c;开发工作的重点从…

C++(Qt)软件调试---linux下生成/调试Core文件(3)

#软件调试 C(Qt)软件调试—linux下生成/调试Core文件&#xff08;3&#xff09; 文章目录C(Qt)软件调试---linux下生成/调试Core文件&#xff08;3&#xff09;前言1、C生成Core和使用GDB调试1、环境2、C生成Core文件3、使用gdb工具调试core可定位段错误位置&#xff1b;4、修…

【创作赢红包】你是真的“C”——C语言中文件操作函数使用的详细讲解【上篇】

你是真的“c”——C语言中文件操作函数使用的详细讲解~&#x1f60e;前言&#x1f64c;一、 为什么使用文件&#xff1a;&#x1f64c;二、 什么是文件&#xff1a;&#x1f64c;2.1 程序文件2.2 数据文件2.3 文件名3. 文件的打开和关闭3.1 文件指针3.2 文件的打开和关闭4. 文件…

【ansible】实施任务控制

目录 实施任务控制 一&#xff0c;循环&#xff08;迭代&#xff09;--- loop 1&#xff0c;利用loop----item循环迭代任务 2&#xff0c;item---loop循环案例 1&#xff0c;定义item循环列表 2&#xff0c;通过变量应用列表格式 3&#xff0c;字典列表&#xff08;迭代嵌套子…

一个ESP32小东西

之前发了ESP8266&#xff0c;有人评论说玩下ESP32然后就买了几个回来&#xff0c;当然&#xff0c;也想着和大家一起玩介绍下这个开发板开发板Github项目链接https://github.com/Xinyuan-LilyGO/T-QT把仓库的代码下载到本地我们可以用ESP-IDF和Arduino两个SDK来开发ESP32S3ESP-…

回溯算法思想、回溯算法解题模板与回溯算法题目索引(不断更新)

回溯算法 回溯算法是一种试探性的搜索算法&#xff0c;它在解决某些组合问题、优化问题、路径问题等&#xff0c;非常有效。回溯算法的核心思想是通过递归和深度优先搜索&#xff08;DFS&#xff09;来搜索问题的解空间。 细说一下这些问题&#xff1a; 组合问题&#xff1a;N…

初级网络工程师这30道面试题一定得会,建议小白收藏!

你好&#xff0c;这里是网络技术联盟站。 后台有小伙伴想让瑞哥整理一下初级网络工程师面试题&#xff0c;今天我整理出来了&#xff0c;针对初级网络工程师&#xff0c;我们在面试的时候主要考察的是基础概念&#xff0c;下面列举的希望大家可以收藏&#xff0c;平时多看看&a…

活动选择问题 | 贪心算法 1

贪心法是一种算法范式&#xff0c;它逐个构建解决方案&#xff0c;始终选择下一个提供最明显和最直接好处的部分。贪心算法用于优化问题。 如果问题具有以下属性&#xff0c;则可以使用 Greedy 解决优化问题&#xff1a; 在每一步中&#xff0c;我们都可以做出当前看起来最好…

MongoDB 6.0 (四)聚合操作

一、 聚合框架的作用 1. 什么是MongoDB 聚合框架 MongoDB 聚合框架(Aggregation Framework)是一个计算框架,它可以: • 作用在一个或几个集合上; • 对集合中的数据进行的一系列运算; • 将这些数据转化为期望的形式; 从效果而言,聚合框架相当于SQL 查询中的: …

【Mysql系列】——详细剖析数据库“索引”【上篇】

【Mysql系列】——详细剖析数据库中的核心知识【索引】&#x1f60e;前言&#x1f64c;索引索引概述为什么需要索引&#xff1f;索引的优缺点索引结构索引的结构为什么不是二叉树和红黑树&#xff1f;索引的B树结构索引的Hash结构Hash结构索引的特点思考&#xff1a;为什么Inno…

MySQL中多表查询(多表关系:一对多、多对多、一对一,分类:连接查询:内连接、外连接、自连接、联合查询,子查询:标量子查询、列子查询、行子查询、表子查询)

多表关系&#xff1a; 一对多&#xff1a; 多对多&#xff1a; 一对一&#xff1a; 我们发现我们利用DQL中的select语句查询多张表的时候&#xff0c;会出现一个数学现象&#xff0c;叫做笛卡尔积 因此我们可以加上where语句来限定条件&#xff1a; 内连接&#xff1a; 此处in…