本科毕业设计email分析技术的研究与实现.docx
《本科毕业设计email分析技术的研究与实现.docx》由会员分享,可在线阅读,更多相关《本科毕业设计email分析技术的研究与实现.docx(55页珍藏版)》请在冰豆网上搜索。
本科毕业设计email分析技术的研究与实现
本科毕业论文
题目
Email分析技术的研究与实现
学院
专业
班级
学号
学生姓名
指导教师
完成日期
摘要
随着互联网的迅猛发展,Email日益成为我们日常生活中信息交流的主要方式,正是由于这一特点使得大量恶意Email与垃圾Email的存在,如何有效管理Email成为目前的主要问题之一。
本文介绍了一个基于Jmail的Email分析管理系统的设计与实现。
主要完成的功能有对于恶意邮件的屏蔽与删除、自定义恶意邮件;根据邮件的属性对服务器中的邮件进行了自动分组管理方便用户查看。
恶意邮件处理的核心是根据关键字技术的,邮件分析系统在接收到邮件服务器(如SMTP)上的客户邮件之后并不马上提交给用户,而是先根据恶意Email的根据关键字进行查找,列出一个初步判定为恶意Email的列表由用户来进行管理,用户可以对恶意邮件进行删除、忽略等操作以提高系统的可靠性。
考虑到邮件本身固有的属性与常用邮件软件如outlook、foxmail等在邮件分组中的表现形式,本系统在处理邮件自动分组时根据邮件服务器中邮件的基本属性,采用代码动态生成邮件的两种邮件分组:
按时间分组及按好友分组。
通过这两种方式,用户可以方便地查阅和管理这些Email。
关键词:
Email;恶意邮件;关键词查找;自动分组
Abstract
Withtherapiddevelopmentofinternet,theEmailbecomesthemainwayofinformationexchangesinourdailylifedaybyday,formalbecausethischaracteristicsmakeagreatdealofmaliceEmailandtheexistenceofthegarbageEmail,howeffectivelymanageEmailtobecomeoneofthecurrentkeyproblems.
CarriesoncheckingtoseekaccordingtothekeywordwhilehandlemaliceEmailofandlistthecredibilitythattherowformthatfirststepjudgestodoevilideaEmailiscarriedonamanagementbycustomertoraisesystem.
Adoptedtwokindsofcentssetmethodwhilehandlethemailautomaticgrouped:
Ontimecentsetandpressthefriendgrouped.Passthesetwokindsofmethod,thecustomercanexpedientlycheckwithmanagetheseEmails.
KeyWords:
Email;maliceemail;keywordssearching;autogrouping
1绪论
1.1课题背景
自从互联网开始发展到现在,互联网已经成为经济、社会、文化、教育以及娱乐等不可缺少的一部分,其中Email与我们的日常工作生活和学习中越来越重要。
Email的出现使得收发信的速度得到看空前的提高,用传统的方式收发信件通常需要数天,而通过Email收发信件往往只需要数秒,Email已经成为人们联系沟通的重要手段,给人们带来了便利。
但是Email使用者在使用Email时随着时间的推移,收件箱中的邮件会越来越多,当使用者需要查阅某个Email时,需要在查找上浪费很多时间。
这造成了邮件管理上的困难。
除了使用Email在邮件管理上存在的问题外还存在很多问题:
如,目前大部分的Email是免费的,通过Email收发信件不仅有速度快的优点,还有发信方不需支付额外费用的特点。
正式因为Email具有的这些特点给我们带来了很多烦恼:
垃圾邮件成为邮件中的主流,垃圾邮件像瘟疫一样蔓延,污染网络环境,占用大量传输、存储和运算资源,影响了网络的正常运行。
业内人士分析:
一旦垃圾邮件占到互联网总数据流量的三分之一以上,将会造成巨大的存储需求,甚至对信息安全系统的有效性构成威胁。
除了垃圾邮件以外还有恶意邮件和广告邮件。
通过邮件攻击现象越来越多,破坏力也越来越强,超过80%的网络入侵者均以破坏电子邮件系统为主要目标,对网络的信息安全造成了严重的威胁。
如病毒侵犯、邮件爆炸、邮件被监听等安全隐患越来越严重,因此电子邮件安全问题也越来越得到使用者的重视。
在Email具有上述能够给我们带来便利但也有烦恼的特点,如何有效利用Email来提高我们的工作效率,为我们的日常生活提供极大的便利等逐渐成为人们关注的焦点,这就迫切需要一个好的Email管理系统来管理我们的邮件。
而Email管理系统是建立在Email的分析之上的。
本文正是研究Email分析技术的研究与实现。
1.2Email分析技术的研究现状
电子邮件系统经过几十年的发展,已经形成了完善的技术体系。
邮件服务器系统在保留了电子邮件系统最初的收发邮件、邮件存储等基本功能的同时,融入了最新的计算机与网络技术,使电子邮件系统有了全新的改观。
邮件技术的发展趋势如下:
(1)Web邮件技术。
随着中国Internet应用的日益普及和逐步深入,这些数字仍在不断增长。
但是对于电子邮件系统来说,单纯使用邮件客户端程序进行邮件的收发已经不能满足用户移动办公的需要。
Web邮件技术的出现,彻底解决了用户办公的需要,使得邮件用户可以在任何地方使用浏览器登录邮件服务器收发邮件,而不用配置邮件客户端程序。
(2)多域邮件服务。
所谓多域邮件服务,即是一台物理服务器为多个独立注册Internet域名的企业或单位提供电子邮件的服务,在逻辑上,这些企业和单位拥有自己独立的邮件服务器,也可以称为虚拟邮件服务器技术。
对于ISP提供商和企业集团公司来说,多域邮件服务器的支持能力是选择邮件服务器的一个重要考虑因素。
它可以方便地扩展其横向邮件服务能力。
(3)安全防护。
现在的邮件服务器在安全防护技术上有了较大的提高,包括数据身份认证、传输加密、垃圾邮件过滤、邮件病毒过滤、安全审计等的多项安全技术在邮件服务器中都得到了很好的应用。
(4)多语言
(5)远程监控和性能调整
(6)无限的可扩展能力
反垃圾邮件技术主要包括:
垃圾邮件过滤技术、邮件服务器的安全管理和培植技术以及对简单邮件通信协议(SMTP)的改进研究等。
对过滤技术的应用和研究在推进和发展阶段主要集中在三个方面:
(1)利用热顶地址、IP或域名“黑白名单”进行的邮件限制或过滤,典型应用诸如:
结合DNS的实时黑名单(RBL)过滤,用户自定义邮件白通道加严整的过滤方法等。
(2)基于数据挖掘技术进行的邮件过滤研究,利用文本分类与统计算法进行垃圾邮件检测,比较有代表性的是贝叶斯过滤器。
它是以自学习、自适应和极高的准确率占据了过滤器这个领域的主导地位。
其他研究包括:
基于记忆信息、基于事件特征描述信息进行数据挖掘的垃圾邮件检测方法。
(3)基于垃圾邮件的特征分析、规则提取的规则匹配过滤方法,对这种技术的应用,SpamAssassin是个中翘楚。
在电子邮件技术越来越成熟的今天,国内外还是在不断的对其进行着分析研究与实现,力使其做到最完美,使恶意邮件无所遁形,功能更强大,便捷,更大众化。
在国内,如网易,新浪,搜狐等大型网站都有为我们提供免费的邮箱;在国外,例如HOTMAIL,YAHOO等网站都有此功能。
从表面看,无论使用境内还是境外的电子邮箱,除了网站品牌的不同,好象并没有太大的区别,国内外各大网站提供的服务在功能和技术上也确实比较类似,但是,业内专家指出,网民使用境外电子邮箱,往往要承担一定的潜在风险。
1.3本文主要研究内容
本文主要研究从邮件服务器(如)上收取邮件,将收取到的邮件列表显示出来,当点击邮件列表上的某一封邮件时能够在相应的地方显示出该邮件的正文,该部分是完成一个邮件解析接收的过程。
在收取到所有邮件之后,接下来要做的工作就主要分为两块:
邮件的自动分组及恶意邮件的发现。
2开发平台及工具简介
2.1VisualC++简介:
几乎所有世界级的软件,从业界领先的Web浏览器到面向任务的企业应用,都是使用MicrosoftVisualC++开发系统来开发的。
要用C++来开发Windows和Web上的高性能应用程序,VisualC++是效率最高的首选工具。
VisualC++6.0在不牺牲灵活性、性能和控制力度的同时,给C++带来更高水平的生产效率。
除了IntelliSenseTechnology(智能感应技术)和EditandContinue(即编即调)等显著缩短开发时间的新特性外,VisualC++6.0还为Web开发和企业开发提供更良好的支持。
MicrosoftVisualC++6.0专业版的健壮的构件开发、强大的数据库工具和完备的Internet支持将使您从中受益,创建出策略性的商务解决方案来。
VisualStudioC++6.0采用一种非常巧妙的方法将原本非常复杂的Windows编程步骤封装起来,使编程人员可以轻松容易地编写Windows应用程序。
VisualC++6.0是MicrosoftVisualStudio6.0的一个子集,他对低版本开发程序兼容。
它有如下的特点:
(1)VisualC++6.0提供了用于开发Windows环境下的应用程序和简捷、快速的开发环境。
利用VisualC++6.0开发Windows应用程序具有很高的效率。
(2)VisualC++6.0提供了MFC类,开发者只需要做少量的工作就可以得到功能齐全的Windows应用程序。
与使用C和WindowsSDK开发Windows应用程序相比,使用VisualC++6.0建立一个完美的Windows应用程序所花费的时间要少得多。
(3)VisualC++6.0还提供了一个高度集成的工具集,使得在开发应用程序的全过程中都保证了较高的效率。
集成化便于程序开发,开发者可以同时在编辑、建立、调试等不同任务之间快速切换,甚至可以同时进行。
(4)调试方便:
在程序调试时,在遇到编译错误时,会在输出窗口显示出错误类型、行号及错误提示等信息。
在输出窗口中双击错误提示时,光标会自动指向出现错误的代码所在行应方便快速找出错误。
VisualC++支持断点调试,同时也可以在调试窗口观察有关变量的值,以方便查找出有关的逻辑错误。
2.2ADO技术
(1)ADO的技术特点
ADO的全称是ActiveXDataObject,它是微软公司为数据库应用程序开发的新接口。
ADO基于COM,提供编程语言可利用的对象,它不仅面向VisualC++,同时还提供面向其他开发工具的应用,如VisualBasic、VJ等,甚至还提供面向诸如VBScript、JavaScript等脚本语言的应用。
ADO的底层是OLEDB,不仅能访问关系数据库,也能访问非关系型数据库。
ADO对OLEDB的包装是相当成功的,相对于OLEDB中众多的接口来说,ADO对象模型简明扼要,没有一点多余的东西,并且其功能还要比DAO强大的多。
并且可以说到目前为止,ADO是目前最快的数据库访问的中间层。
(2)ADO的结构
ADO模型包含了7个对象和4个集合,ADO的结构图如图2-1所示。
2.3SQL语句简介
SQL是一种面向数据库的通用数据处理语言规范,能完成以下几类功能:
提取查询数据,插入修改删除数据,生成修改和删除数据库对象,数据库安全控制,数据库完整性及数据保护控制。
本文用到的SQL语句主要为select语句和insert语句。
图2-1ADO的结构图
3需求分析与总体设计
3.1系统需求分析
邮件的自动分组主要是为了管理方便,查阅方便,以节省用户宝贵的时间。
在实现邮件自动分组时用户可以输入好友信息,以便好友发过来的Email可以分到一起,这对与查找节省了很多时间,同时也提供了极大的方便。
在进行Email来源分组时,分组信息是根据用户输入的好友姓名及Email地址自动生成。
出来根据Email来源进行分类外,本文还研究通过时间作为条件来进行分类,比如说将邮件分为:
今天收到的Email、昨天收到的Email、更早收到的Email。
恶意邮件的发现是为了提高安全性的,可过滤一些用户认为是垃圾邮件的Email,用户可以根据收到的Email,点击相应的菜单来启动对Email进行分析的过程。
通过查找相应的关键字列出垃圾邮件列表,用户可以根据所列出的垃圾邮件列表进行操作:
如删除该Email或忽略对该Email为垃圾邮件的忽略。
因为有些对于用户来说是非常重要的邮件而被误判为垃圾Email的情况发生。
就像有些杀毒软件会误把一些系统文件或一些用户自己有文件误报为病毒一样。
这样做是为了在经过用户确认的前提下从邮件服务器中删除邮件,进一步提高可靠性和安全性。
3.2系统功能模块图
系统功能模块图如图3-1所示。
由该图可以看出本系统包含了3个大的功能模块:
Email接收并解析,恶意Email的发现,Email自动分组。
其中恶意Email的发现包括了关键字的添加,该恶意Email的删除,该恶意Email的忽略三个小的功能模块。
Email自动分组中包括了按Email来源分组,按Email接收到的时间分组,好友信息的添加3个小的功能模块。
图3-1系统功能模块图
3.3系统目标
本文所设计的Email分析系统要能够实现Email的接收并解析,恶意Email的发现及发现后的处理,Email的自动分组。
并且这些功能要能够有很好的扩展性,为了达到扩展性的要求,本文从以下几个方面进行设计:
恶意邮件的关键字可以手动添加,添加完成之后保存于数据库中以便用户在下次实用时不需要重复输入关键字进行扫描。
对于扫描到的恶意Email,由用户来执行相应的操作:
删除该Email或忽略该Email为恶意Email的警告,以免系统自动进行操作时删除用户重要的Email。
好友信息可由用户添加,好友信息存入Access数据库中,这样用户只需输入一次好友信息即可并且当用户增加一个好友信息时能够动态生成好友并将该好友发过来的Email自动放入该分组当中,便于用户的查找与阅读。
Email分组还提供另外一种分组:
按时间分组,以方便用户按时间段来查找邮件,这样也可以节省用户查找Email的时间,提高了用户的效率。
本系统用VC开发,连接数据库采用ADO方式与Access进行连接。
4具体实现
4.1数据库的创建
本系统采用Access数据库来存储相关信息,建立数据库的过程如下:
在工程所在目录下点击鼠标右键,在弹出的快捷菜单中将鼠标移到“新建”,再在弹出的字菜单中点击“新建MicrosoftOfficeAccess应用程序”。
到此数据库就建立好了,将改Access文件改名Email.mdb。
数据库表格的建立:
本系统中数据库主要是用于存储恶意Email判断的关键字信息及好友信息。
本系统建立两张表:
keyword表和emailbook表。
(1)keyword表只包含一个字段keyword,设计如表4-1所示。
表4-1关键字表keyword
字段含义
字段名
数据类型
说明
关键字
keyword
文本
(2)emailbook表包含两个字段:
name和email,其中name是好友的姓名,email为好友的email地址。
设计如表4-2所示。
表4-2用户信息表(通信录表)emailbook
字段含义
字段名
数据类型
说明
姓名
name
文本
Email地址
email
文本
4.2MFC连接数据库
本系统在进行数据库连接时采用的是ADO方式进行连接。
ADO(ActiveXDataObject)是Microsoft数据库应用程序开发的新接口,是建立在OLEDB之上的高层数据库访问技术,即使你对OLEDB,COM不了解也能轻松对付ADO,因为它非常简单易用,甚至比你以往所接触的ODBCAPI、DAO、RDO都要容易使用,并不失灵活性。
ADO数据库开发的基本流程,它的基本步骤如下:
(1)初始化COM库,引入ADO库定义文件
(2)用Connection对象连接数据库
(3)利用建立好的连接,通过Connection、Command对象执行SQL命令,或利用Recordset对象取得结果记录集进行查询、处理。
(4)使用完毕后关闭连接释放对象。
接下来详细介绍连接过程:
COM库的初始化
我们可以使用AfxOleInit()来初始化COM库,这项工作通常在CWinApp:
:
InitInstance()的重载函数中完成,代码:
BOOLCADOTest1App:
:
InitInstance()
{
AfxOleInit();
......
}
(2)用#import指令引入ADO类型库
为了引入ADO类型库,需要在项目的stdafx.h文件中加入如下语句:
#import"c:
\programfiles\commonfiles\system\ado\msado15.dll"no_namespacerename("EOF","adoEOF")这一语句的作用同我们已经十分熟悉的#include类似,编译的时候系统会为我们生成msado15.tlh,ado15.tli两个C++头文件来定义ADO库。
开发环境中msado15.dll不一定在这个目录下,要按实际情况修改;在编译的时候可能会出现如下警告,对此微软在MSDN中作了说明,并建议我们不要理会这个警告:
msado15.tlh(405):
warningC4146:
unaryminusoperatorappliedtounsignedtype,resultstillunsigned。
(3)创建Connection对象并连接数据库
为了首先我们需要添加一个指向Connection对象的指针_ConnectionPtrm_pConnection,下面的代码演示了如何创建Connection对象实例及如何连接数据库并进行异常捕捉:
BOOLCADOTest1Dlg:
:
OnInitDialog()
{
CDialog:
:
OnInitDialog();
HRESULThr;
Try
{
hr=m_pConnection.CreateInstance("ADODB.Connection");///创建Connection对象
if(SUCCEEDED(hr))
{
hr=m_pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0;
DataSource=test.mdb","","",adModeUnknown);///连接数据库
//上面一句中连接字串中的Provider是针对ACCESS2000环境的,对于ACCESS97,
//需要改为:
Provider=Microsoft.Jet.OLEDB.3.51;
}
}
catch(_com_errore)///捕捉异常
{
CStringerrormessage;
errormessage.Format("连接数据库失败!
\r\n错误信息:
%s",e.ErrorMessage());
AfxMessageBox(errormessage);///显示错误信息
}
在这段代码中我们是通过Connection对象的Open方法来进行连接数据库的。
(4)执行SQL命令并取得结果记录集
为了取得结果记录集,我们定义一个指向Recordset对象的指针:
_RecordsetPtrm_pRecordset;并为其创建Recordset对象的实例:
m_pRecordset.CreateInstance("ADODB.Recordset"),SQL命令的执行可以采用多种形式,本文采用了Recordset对象进行查询取得记录集。
m_pRecordset->Open(SQL语句,_variant_t((IDispatch*)m_pConnection,true),
adOpenStatic,adLockOptimistic,adCmdText);
插入操作采用的是Connection对象的Execute方法执行SQL命令。
Execute()方法的原型如下所示:
RecordsetPtrConnection15:
:
Execute(_bstr_tCommandText,VARIANT*RecordsAffected,longOptions)其中CommandText是命令字串,通常是SQL命令。
参数RecordsAffected是操作完成后所影响的行数,参数Options表示CommandText中内容的类型,Options可以取如下值之一:
adCmdText表明CommandText是文本命令;adCmdTable表明CommandText是一个表名;adCmdProc表明CommandText是一个存储过程;adCmdUnknown表明CommandText内容未知。
Execute()函数执行完后返回一个指向记录集的指针。
(5)关闭记录集与连接
记录集或连接都可以用Close()方法来关闭:
m_pRecordset->Close();///关闭记录集
m_pConnection->Close();///关闭连接
本系统在设计对Access进行操作时为了方便将上述操作写成了一个类。
4.3Email收取并解析
本文所研究的Email分析技术的研究与实现,在实现收取邮件时,用到了一个动态链接库:
jmail.dll。
该动态链接库封装了对邮件相关的操作。
jmail常用的一些方法及属性如下:
Body:
String:
信件体,正文,可使用AppendText追加内容。
如:
JMail.Body="Helloworld"
ErrorCode:
Integer:
如果JMail.silent设置为true,ErrorCode包含的是错误代码。
如:
Response.Write(JMail.ErrorCode);
ErrorMessage:
String:
如果JMail.silent设置为true,包含的是错误信息。
如:
Response.Write(JMail.ErrorMessage)。
Priority:
Integer:
优先级.范围在1-5之间,1高优先级.有些邮件程序称之为紧急;2也是高优先级;3普通优先级;4低优先级;5最低的优先级。
如:
JMail.Priority=3
ServerAddress:
String:
指定邮件服务器的地址。
可以指定多个服务器,用分号点开。
可以指定端口号。
如果serverAddress保持空白,JMail会尝试解决远程邮件服