分析技术的研究与实现毕业设计_第1页
分析技术的研究与实现毕业设计_第2页
分析技术的研究与实现毕业设计_第3页
分析技术的研究与实现毕业设计_第4页
分析技术的研究与实现毕业设计_第5页
已阅读5页,还剩46页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、本科毕业论文 题 目Email分析技术的研究与实现 学 院 专 业 班 级 学 号 学生姓名 指导教师 完成日期 摘要 随着互联网的迅猛发展,Email日益成为我们日常生活中信息交流的主要方 式,正是由于这一特点使得大量恶意 Email与垃圾Email的存在,如何有效管理 Email成为目前的主要问题之一。 本文介绍了一个基于Jmail的Email分析管理系统的设计与实现。主要完成 的功能有对于恶意邮件的屏蔽与删除、自定义恶意邮件;根据邮件的属性对服务 器中的邮件进行了自动分组管理方便用户查看。 恶意邮件处理的核心是根据关键 字技术的,邮件分析系统在接收到邮件服务器(如SMTP.163.con

2、)上的客户邮 件之后并不马上提交给用户, 而是先根据恶意 Email 的根据关键字进行查找, 列 出一个初步判定为恶意 Enail 的列表由用户来进行管理, 用户可以对恶意邮件进 行删除、忽略等操作以提高系统的可靠性。 考虑到邮件本身固有的属性与常用邮 件软件如 outlook 、foxnail 等在邮件分组中的表现形式,本系统在处理邮件自 动分组时根据邮件服务器中邮件的基本属性, 采用代码动态生成邮件的两种邮件 分组:按时间分组及按好友分组。 通过这两种方式, 用户可以方便地查阅和管理 这些 Enail。 关键词:Email ;恶意邮件;关键词查找;自动分组 Abstract With th

3、e rapid development of internet,the Email becomes the main way of information exchanges in our daily life day by day, formal because this characteristics make a great deal of malice Email and the existence of the garbage Email, how effectively manage Email to become one of the current key problems.

4、Carries on checking to seek according to the key word while handle malice Email of and list the credibility that the row form that first step judges to do evil idea Email is carried on a management by customer to raise system. Adopted two kinds of cents set method while handle the mail automatic gro

5、uped: On time cent set and press the friend grouped. Pass these two kinds of method, the customer can expediently check with manage these Emails. Key Words: Email; malice email; keywords searching; auto grouping 目录 1 绪论 1 1.1 课题背景 1 1.2 Email 分析技术的研究现状 1 1.3 本文主要研究内容 3 2.开发平台及工具简介 4 2.1 Visual C+ 简介

6、: 4 2.2 ADO 技术5 2.3 SQL语句简介5 3 需求分析与总体设计 7 3.1 系统需求分析 7 3.2 系统功能模块图 7 3.3 系统目标 8 4. 具体实现 9 4.1 数据库的创建 9 4.2 MFC连接数据库9 4.3 Email 收取并解析12 4.4 恶意 Email处理18 4.4.1 恶意Email 分析18 4.4.2 恶意Email 的删除 22 4.4.3 恶意Email 的忽略 24 4.4.4 恶意关键字的添加 26 4.5 Email自动分组 27 4.5.1 按时间进行分组 27 4.5.2 按好友进行分组 33 4.5.2 添加好友信息 37 5

7、. 程序调试 39 6. 结论与展望40 参考文献 41 致 谢42 1 绪论 1.1 课题背景 自从互联网开始发展到现在,互联网已经成为经济、社会、文化、教育以及 娱乐等不可缺少的一部分, 其中 Email 与我们的日常工作生活和学习中越来越重 要。 Email 的出现使得收发信的速度得到看空前的提高,用传统的方式收发信 件通常需要数天,而通过 Email 收发信件往往只需要数秒, Email 已经成为人们 联系沟通的重要手段,给人们带来了便利。但是Email使用者在使用Email时随着 时间的推移,收件箱中的邮件会越来越多,当使用者需要查阅某个 Email 时,需 要在查找上浪费很多时间。

8、这造成了邮件管理上的困难。 除了使用 Email 在邮件管理上存在的问题外还存在很多问题: 如,目前大部 分的 Email 是免费的,通过 Email 收发信件不仅有速度快的优点,还有发信方不 需支付额外费用的特点。正式因为 Email 具有的这些特点给我们带来了很多烦 恼:垃圾邮件成为邮件中的主流,垃圾邮件像瘟疫一样蔓延,污染网络环境,占 用大量传输、存储和运算资源,影响了网络的正常运行。业内人士分析:一旦垃 圾邮件占到互联网总数据流量的三分之一以上, 将会造成巨大的存储需求, 甚至 对信息安全系统的有效性构成威胁。除了垃圾邮件以外还有恶意邮件和广告邮 件。通过邮件攻击现象越来越多 ,破坏力

9、也越来越强 ,超过 80%的网络入侵者均以 破坏电子邮件系统为主要目标 ,对网络的信息安全造成了严重的威胁。如病毒侵 犯、邮件爆炸、 邮件被监听等安全隐患越来越严重, 因此电子邮件安全问题也越 来越得到使用者的重视。 在 Email 具有上述能够给我们带来便利但也有烦恼的特点,如何有效利用 Email 来提高我们的工作效率,为我们的日常生活提供极大的便利等逐渐成为人 们关注的焦点,这就迫切需要一个好的 Email 管理系统来管理我们的邮件。而 Email 管理系统是建立在 Email 的分析之上的。本文正是研究 Email 分析技术的 研究与实现。 1.2 Email 分析技术的研究现状 电子

10、邮件系统经过几十年的发展, 已经形成了完善的技术体系。 邮件服务器 系统在保留了电子邮件系统最初的收发邮件、 邮件存储等基本功能的同时, 融入 了最新的计算机与网络技术, 使电子邮件系统有了全新的改观。 邮件技术的发展 趋势如下: (1) Web邮件技术。随着中国In ternet应用的日益普及和逐步深入,这些数字 仍在不断增长。 但是对于电子邮件系统来说, 单纯使用邮件客户端程序进行邮件 的收发已经不能满足用户移动办公的需要。 Web邮件技术的出现,彻底解决了用 户办公的需要,使得邮件用户可以在任何地方使用浏览器登录邮件服务器收发邮 件,而不用配置邮件客户端程序。 (2) 多域邮件服务。所谓

11、多域邮件服务,即是一台物理服务器为多个独立注 册In ternet域名的企业或单位提供电子邮件的服务,在逻辑上,这些企业和单位 拥有自己独立的邮件服务器,也可以称为虚拟邮件服务器技术。 对于ISP提供商 和企业集团公司来说, 多域邮件服务器的支持能力是选择邮件服务器的一个重要 考虑因素。它可以方便地扩展其横向邮件服务能力。 (3) 安全防护。现在的邮件服务器在安全防护技术上有了较大的提高,包括 数据身份认证、传输加密、垃圾邮件过滤、邮件病毒过滤、安全审计等的多项安 全技术在邮件服务器中都得到了很好的应用。 (4) 多语言 (5) 远程监控和性能调整 (6) 无限的可扩展能力 反垃圾邮件技术主要

12、包括: 垃圾邮件过滤技术、 邮件服务器的安全管理和培 植技术以及对简单邮件通信协议(SMTP)的改进研究等。 对过滤技术的应用和研究在推进和发展阶段主要集中在三个方面: (1) 利用热顶地址、IP或域名 黑白名单”进行的邮件限制或过滤,典型应用 诸如:结合DNS的实时黑名单(RBL)过滤,用户自定义邮件白通道加严整的过 滤方法等。 (2) 基于数据挖掘技术进行的邮件过滤研究,利用文本分类与统计算法进行 垃圾邮件检测, 比较有代表性的是贝叶斯过滤器。 它是以自学习、 自适应和极高 的准确率占据了过滤器这个领域的主导地位。 其他研究包括: 基于记忆信息、 基 于事件特征描述信息进行数据挖掘的垃圾邮

13、件检测方法。 (3) 基于垃圾邮件的特征分析、规则提取的规则匹配过滤方法,对这种技术 的应用,SpamAssassir是个中翘楚。 在电子邮件技术越来越成熟的今天, 国内外还是在不断的对其进行着分析研 究与实现,力使其做到最完美,使恶意邮件无所遁形,功能更强大,便捷,更大 众化。在国内,如网易,新浪,搜狐等大型网站都有为我们提供免费的邮箱;在 国外,例如 HOTMAIL , YAHOO 等网站都有此功能。 从表面看, 无论使用境内还是境外的电子邮箱, 除了网站品牌的不同, 好象 并没有太大的区别,国内外各大网站提供的服务在功能和技术上也确实比较类 似,但是,业内专家指出, 网民使用境外电子邮箱

14、, 往往要承担一定的潜在风险 1.3 本文主要研究内容 本文主要研究从邮件服务器(如上收取邮件,将收取到的邮件 列表显示出来, 当点击邮件列表上的某一封邮件时能够在相应的地方显示出该邮 件的正文,该部分是完成一个邮件解析接收的过程。 在收取到所有邮件之后, 接下来要做的工作就主要分为两块: 邮件的自动分 组及恶意邮件的发现。 2 开发平台及工具简介 2.1 Visual C+简介: 几乎所有世界级的软件,从业界领先的 Web浏览器到面向任务的企业应用, 都是使用Microsoft Visual C+开发系统来开发的。要用 C+来开发 Windows和 Web上的高性能应用程序,Visual C

15、+是效率最高的首选工具。Visual C+ 6.0 在不牺牲灵活性、性能和控制力度的同时,给C+带来更高水平的生产效率。除 了 IntelliSenseTechnology (智能感应技术)和 Edit and Continue (即编即调)等 显著缩短开发时间的新特性外,Visual C+ 6.0还为Web开发和企业开发提供更 良好的支持。 Microsoft Visual C+ 6.0 专业版的健壮的构件开发、强大的数据库 工具和完备的In ternet支持将使您从中受益,创建出策略性的商务解决方案来。 Visual Studio C+6.0 采用一种非常巧妙的方法将原本非常复杂的 Win

16、dows 编程步骤封装起来,使编程人员可以轻松容易地编写Windows应用程序。Visual C+6.0是Microsoft Visual Studio6.0的一个子集,他对低版本开发程序兼容。它 有如下的特点: (1) Visual C+6.0提供了用于开发 Windows环境下的应用程序和简捷、快 速的开发环境。利用 Visual C+6.0开发Windows应用程序具有很高的效率。 (2) Visual C+6.0提供了 MFC类,开发者只需要做少量的工作就可以得到功 能齐全的 Windows 应用程序。与使用 C 和 Windows SDK 开发 Windows 应用程 序相比,使用V

17、isual C+6.0建立一个完美的 Windows应用程序所花费的时间要 少得多。 (3) Visual C+6.0还提供了一个高度集成的工具集,使得在开发应用程序的 全过程中都保证了较高的效率。集成化便于程序开发,开发者可以同时在编辑、 建立、调试等不同任务之间快速切换,甚至可以同时进行。 (4) 调试方便:在程序调试时, 在遇到编译错误时, 会在输出窗口显示出错 误类型、 行号及错误提示等信息。 在输出窗口中双击错误提示时, 光标会自动指 向出现错误的代码所在行应方便快速找出错误。 Visual C+支持断点调试,同时 也可以在调试窗口观察有关变量的值,以方便查找出有关的逻辑错误。 2.

18、2 ADO 技术 (1) ADO 的技术特点 ADO 的全称是 ActiveX Data Object ,它是微软公司为数据库应用程序开发的 新接口。ADO基于COM ,提供编程语言可利用的对象,它不仅面向Visual C+, 同时还提供面向其他开发工具的应用,如 Visual Basic、VJ等,甚至还提供面 向诸如VBScript、JavaScript等脚本语言的应用。ADO的底层是OLE DB,不仅 能访问关系数据库,也能访问非关系型数据库。ADO对OLE DB的包装是相当成 功的,相对于 OLE DB 中众多的接口来说, ADO 对象模型简明扼要,没有一点 多余的东西,并且其功能还要比

19、 DAO 强大的多。并且可以说到目前为止, ADO 是目前最快的数据库访问的中间层。 (2) ADO 的结构 ADO 模型包含了 7 个对象和 4个集合, ADO 的结构图如图 2-1 所示。 2.3 SQL 语句简介 SQL是一种面向数据库的通用数据处理语言规范,能完成以下几类功能: 提取查询数据,插入修改删除数据,生成修改和删除数据库对象,数据库安全 控制,数据库完整性及数据保护控制。本文用到的SQL语句主要为select语句 和insert语句。 图2-1 ADO的结构图 3 需求分析与总体设计 3.1 系统需求分析 邮件的自动分组主要是为了管理方便,查阅方便,以节省用户宝贵的时间。 在

20、实现邮件自动分组时用户可以输入好友信息, 以便好友发过来的 Email 可以分 到一起,这对与查找节省了很多时间,同时也提供了极大的方便。在进行 Email 来源分组时,分组信息是根据用户输入的好友姓名及 Email地址自动生成。出来 根据 Email 来源进行分类外, 本文还研究通过时间作为条件来进行分类, 比如说 将邮件分为:今天收到的 Email、昨天收到的Email、更早收到的Email。 恶意邮件的发现是为了提高安全性的,可过滤一些用户认为是垃圾邮件的 Email,用户可以根据收到的Email,点击相应的菜单来启动对 Email进行分析的 过程。通过查找相应的关键字列出垃圾邮件列表,

21、 用户可以根据所列出的垃圾邮 件列表进行操作:如删除该 Email 或忽略对该 Email 为垃圾邮件的忽略。因为有 些对于用户来说是非常重要的邮件而被误判为垃圾 Email 的情况发生。 就像有些 杀毒软件会误把一些系统文件或一些用户自己有文件误报为病毒一样。 这样做是 为了在经过用户确认的前提下从邮件服务器中删除邮件, 进一步提高可靠性和安 全性。 3.2 系统功能模块图 系统功能模块图如图 3-1 所示。由该图可以看出本系统包含了 3 个大的功能 模块: Email 接收并解析,恶意 Email 的发现, Email 自动分组。其中恶意 Email 的发现包括了关键字的添加,该恶意 Em

22、ail 的删除,该恶意 Email 的忽略三个小 的功能模块。 Email 自动分组中包括了按 Email 来源分组,按 Email 接收到的时 间分组,好友信息的添加 3 个小的功能模块。 图3-1系统功能模块图 3.3系统目标 本文所设计的Email分析系统要能够实现Email的接收并解析,恶意Email 的发现及发现后的处理,Email的自动分组。并且这些功能要能够有很好的扩展 性,为了达到扩展性的要求,本文从以下几个方面进行设计: 恶意邮件的关键字可以手动添加,添加完成之后保存于数据库中以便用户在 下次实用时不需要重复输入关键字进行扫描。 对于扫描到的恶意Email,由用户来执行相应的

23、操作:删除该 Email或忽略 该Email为恶意Email的警告,以免系统自动进行操作时删除用户重要的Email。 好友信息可由用户添加,好友信息存入Access数据库中,这样用户只需输 入一次好友信息即可并且当用户增加一个好友信息时能够动态生成好友并将该 好友发过来的Email自动放入该分组当中,便于用户的查找与阅读。 Email分组还提供另外一种分组:按时间分组,以方便用户按时间段来查找 邮件,这样也可以节省用户查找 Email的时间,提高了用户的效率。 本系统用VC开发,连接数据库采用ADO方式与Access进行连接。 4具体实现 4.1数据库的创建 本系统采用Access数据库来存储

24、相关信息,建立数据库的过程如下: 在工程所在目录下点击鼠标右键,在弹出的快捷菜单中将鼠标移到“新建”, 再在弹出的字菜单中点击“新建Microsoft Office Access应用程序”。到此数据库 就建立好了,将改 Access文件改名Email.mdb。 数据库表格的建立: 本系统中数据库主要是用于存储恶意 Email判断的关键字信息及好友信息。 本系统建立两张表:keyword表和emailbook表。 (1) keyword表只包含一个字段 keyword,设计如表4-1所示。 表4-1 关键字表keyword 字段含义 字段名 数据类型 说明 关键字 keyword 文本 (2)

25、emailbook表包含两个字段:name和email,其中name是好友的姓名, email为好友的email地址。设计如表4-2所示。 表4-2 用户信息表(通信录表) emailbook 字段含义 字段名 数据类型 说明 姓名 n ame 文本 Email地址 email 文本 4.2 MFC连接数据库 本系统在进行数据库连接时采用的是ADO方式进行连接。ADO(ActiveX Data Object)是 Microsoft数据库应用程序开发的新接口,是建立在 OLE DB之上 的高层数据库访问技术,即使你对 OLE DB,COM不了解也能轻松对付 ADO, 因为它非常简单易用,甚至比你

26、以往所接触的 ODBC API、DAO、RDO都要容 易使用,并不失灵活性。 ADO数据库开发的基本流程,它的基本步骤如下: (1) 初始化 COM 库,引入 ADO 库定义文件 (2) 用 Connection 对象连接数据库 (3) 利用建立好的连接,通过 Connection、Command 对象执行 SQL 命令, 或利用Recordset对象取得结果记录集进行查询、处理。 (4) 使用完毕后关闭连接释放对象。 接下来详细介绍连接过程: COM 库的初始化 我 们 可 以 使 用 AfxOleInit() 来 初 始 化 COM 库 , 这 项 工 作 通 常 在 CWinApp:In

27、itInstance() 的重载函数中完成,代码: BOOL CADOTest1App:InitInstance() AfxOleInit(); (2) 用#import指令引入ADO类型库 为了引入 ADO 类型库,需要在项目的 stdafx.h 文件中加入如下语句: #import c:program filescommon filessystemadomsado15.dll no_namespace rename(EOF,adoEOF)这一语句的作用同我们已经十分熟悉的 #inelude类似, 编译的时候系统会为我们生成 msado15.tlh,ado15.tli两个C+头文件来定义AD

28、O 库。 开发环境中 msado15.dll 不一定在这个目录下,要按实际情况修改;在编译 的时候可能会出现如下警告,对此微软在 MSDN 中作了说明,并建议我们不要 理会这个警告: msado15.tlh(405) : warning C4146: unary minus operator applied to unsigned type, result still unsigned。 (3) 创建Conn ection对象并连接数据库 为了首先我们需要添加一个指向 Connection 对象的指针 _ConnectionPtr m_pCo nn ectio n,下面的代码演示了如何创建 C

29、onn ection对象实例及如何连接数 据库并进行异常捕捉: BOOL CADOTest1Dlg:OnInitDialog() CDialog:OnInitDialog(); HRESULT hr; Try hr = m_pConnection.CreateInstance(ADODB.Connection);/ 创 建 Connection 对象 if(SUCCEEDED(hr) hr = m_pConnection-Open(Provider=Microsoft.Jet.OLEDB.4.0; Data Source=test.mdb,adModeU nknown);/ 连接数据库 /上面

30、一句中连接字串中的 Provider 是针对 ACCESS2000 环境的,对 于 ACCESS97, /需要改为: Provider=Microsoft.Jet.OLEDB.3.51; catch(_com_error e)/捕 捉异常 CString errormessage; errormessage.Format( 连 接 数 据 库 失 败 !rn 错 误 信 息 :%s,e.ErrorMessage(); AfxMessageBox(errormessage);/显 示错误信息 在这段代码中我们是通过 Connection 对象的 Open 方法来进行连接数据库 的。 (4) 执行

31、 SQL 命令并取得结果记录集 为了取得结果记录集,我们定义一个指向Recordset对象的指 针 :_RecordsetPtr m_pRecordset; 并 为 其 创 建 Recordset 对 象 的 实 例 : m_pRecordset.CreateInstance(ADODB.Recordset,) SQL 命令的执行可以采用多 种形式 , 本文采用 了 Recordset 对 象进行查询 取得 记 录集 。 m_pRecordset-Open(SQL语句,variant_t(IDispatch *)m_pConnection,true), adOpenStatic,adLockO

32、ptimistic,adCmdText); 插入操作采用的是 Connection对象的Execute方法执行SQL命令。Execute。 方法的原型如下所示: RecordsetPtr Connection15:Execute ( _bstr_t CommandText, VARIANT * RecordsAffected, long Options ) 其中 CommandText是命令字串,通 常是SQL命令。参数RecordsAffected是操作完成后所影响的行数,参数Options 表示CommandText中内容的类型,Options可以取如下值之一:adCmdText表明 Co

33、mmandText 是文本命令; adCmdTable 表明 CommandText 是一个表名; adCmdProc 表 明 CommandText 是 一 个 存 储 过 程 ; adCmdUnknown 表 明 CommandText内容未知。Execute ()函数执行完后返回一个指向记录集的指针。 (5) 关闭记录集与连接 记录集或连接都可以用Close ()方法来关闭: m_pRecordset-Close();关闭记录集 m_pCo nn ectio n-Close();/关闭连接 本系统在设计对Access进行操作时为了方便将上述操作写成了一个类。 4.3 Email 收取并解

34、析 本文所研究的 Email 分析技术的研究与实现, 在实现收取邮件时, 用到了一 个动态链接库: jmail.dll 。该动态链接库封装了对邮件相关的操作。 jmail 常用的 一些方法及属性如下: Body : String :信件体,正文,可使用AppendText追加内容。如:JMail.Body = Hello world ErrorCode : Integer :如果 JMail.silent 设置为 true,ErrorCode包含的是错误代 码 。如: Response.Write( JMail.ErrorCode ); ErrorMessage : String : 如 果

35、JMail.silent 设 置 为 true, 包 含 的 是 错 误 信 息 。 如 : Response.Write( JMail.ErrorMessage 。) Priority : Integer :优先级. 范围在 1-5之间 , 1 高优先级 . 有些邮件程序称 之为紧急 ;2 也是高优先级 ;3 普通优先级 ;4 低优先级 ;5 最低的优先级 。 如: JMail.Priority = 3 ServerAddress : String :指定邮件服务器的地址。可以指定多个服务器,用 分号点开。可以指定端口号。如果 serverAddress保持空白,JMail会尝试解决远 程邮

36、件服务器, 然后直接发送到服务器上去。 如: JMail.ServerAddress = ; :2500 Close() :强制 JMail 关闭缓冲的与邮件服务器的连接 ,如: JMail.Close(); 要接收某个邮箱的Email,我们首先要连接至该服务器,这需要我们输入用 户名和密码及邮件服务器地址。系统运行时主界面如图 4-1 所示 图4-1 Email分析系统主界面 连接邮件服务器时用到的方法为:Connect (),该方法有几个参数:用户名 (用户ID),用户密码,服务器地址,服务器端口号,接收邮件的服务器端口号 一般为110号端口。在连接服务器并收取Email时,用户在输入有关

37、信息时有可 能会在前面或后面带上空格,我们必须过滤这些空格,否则的话会出现服务器地 址输入错误或者用户名或密码输入错误。 这样用户会觉得自己没有输错而怀疑我 们的系统有问题,为了避免这种错误我们应该在获得用户输入的上述信息之后进 行过滤操作。 在用户使用过程当中也有可能会出现这种情况: 用户没有输入用户名就点击 了接收邮件按钮,这样的操作是不允许的,因为在没有输入用户名的情况下,系 统根本不知道从哪里接收Email。我们必须加一个判断条件看用户是否输入了用 户名,在用户没有输入用户名的条件下不允许用户收取Email。同样的道理用户 很有可能会忘记输入服务器地址,没有输入该信息系统根本不知道从哪

38、个邮件服 务器中接收邮件,这时我们也必须加一个判断条件,以减少系统出错的概率,让 我们的系统更加健壮。 在用户接收Email时,用户可能会连续两次点击接收邮件, 我们应该只在邮 件列表空控件中显示最新的邮件信息, 而不应该有重复的信息出现,所以我们必 须在点击接收邮件按钮的一开始要清空邮件信息控件中所有的信息。 此外,在接 收完邮件时也必须释放邮件信息指针,但此时不能关闭连接,因为在后面的恶意 Email 的删除中是要用到该连接指针的,但是如果不关闭连接的话,再次点击接 收邮件按钮时会出现错误(非法操作) ,因为此时连接是打开的,再次打开是不 允许的。解决方法如下: 在进行打开前先判断连接是否

39、是打开的, 若是打开了的, 则先关闭该连接,若没有打开则直接创建连接就可以了。 在接收邮件时的连接在其他的类中要用到, 此时必须定义一个类的共有成员 来指向该指针, 只有这样在删除时才能够用该连接指针。 本系统中出来要删除恶 意邮件以外,其他的操作基本上都是对 Email 的只读操作,在进行只读操作时, 用集合类来操作更为方便快捷,该集合类的每一项存储的是一个类的一个指针。 该类是一个邮件信息类,主要包括 Email 的来处, Email 的主题, Email 接收到 的时间, Email 的正文,该 Email 的索引号(用于删除时的一个参数)这五个成 员变量, 这五个成员变量出来了 Ema

40、il 的索引号之外都是字符串类型的变量, 索 引号是一个长整型的数。 在遍历每封 Email 的同时把这些 Email 都存储到集合类 当中。在收取了所有的 Email 的时候,同时在集合类当中存储了所有的邮件信息。 同时也要让邮件的一些信息显示出来如:主题,来源,时间等,以便用户查阅。 连接并收取邮件的代码如下: UpdateData(); m_strMailServer.TrimLeft(); m_strMailServer.TrimRight(); m_strUserid.TrimLeft(); m_strUserid.TrimRight(); m_strPassword.TrimLef

41、t(); m_strPassword.TrimRight(); if(m_strMailServer.GetLength() = 0) AfxMessageBox( 邮件服务器不能为空 ); return; if(m_strUserid.GetLength() Disconnect(); / 超时 30 秒 pPOP3-Timeout = 30; / 连接邮件服务器 pPOP3-Connect(LPCTSTR)m_strUserid, (LPCTSTR)m_strPassword, (LPCTSTR)m_strMailServer, 110); p=pPOP3; /给类的成员指针赋值, 以便其

42、他类能够调用该连接指针 pMessages = pPOP3-Messages; /已下载的邮件的实际个数(因为第0个ITEM是未用的,所以减1) long lCount = pMessages-Count - 1; CMessages * EMail_Messages; if(lCount = 0) AfxMessageBox(信箱为空); else jmail:IMessagePtr pMessage; / 遍历每封信 for(long i = 1; i Itemi; _bstr_t bstrFrom = pMessage-From; _bstr_t bstrSubject = pMessa

43、ge-Subject; _bstr_t bstrBody = pMessage-Body; COleDateTime oleDate = pMessage-Date; /-将接收到的邮件存储到全局的集合类变量中,以便日后 使用 EMail_Messages = new CMessages(const char *)bstrFrom, (const char*)bstrSubject,(const char*)oleDate.Format(%Y-%m-%d),(const char *) bstrBody,i); theApp.messageArray.Add(EMail_Messages);

44、/ 将邮件信息添加到列表框控件中 int nListItem = m_ctlMessagesList.InsertItem(i, (const char * )bstrFrom); m_ctlMessagesList.SetItem(nListItem, 1, LVIF_TEXT, (const char*)bstrSubject, 0, 0, 0, NULL); m_ctlMessagesList.SetItem(nListItem, 2, LVIF_TEXT, (const char*)oleDate.Format(%Y-%m-%d), 0, 0, 0, NULL); m_strBodyA

45、rray.Add(const char*)bstrBody); pMessage.Release(); catch(_com_error e) CString strErr; strErr.Format( 错 误 信 息 : %srn 错 误 描 述 : %s, (LPCTSTR)e.ErrorMessage(), (LPCTSTR)e.Description(); AfxMessageBox(strErr); 接收部分流程图如图 4-2 所示: 图4-2接收部分流程图 在接收了所有的邮件之后,用户在邮件列表当中点击某个Email的时候,必 须要显示出邮件的正文供用户阅读。要实现此功能就要添加

46、一个消息处理函数, 这个消息处理函数是针对邮件列表框控件的,即当选中某项时就必须发出一个相 应的消息,通过消息路由在相应的消息处理函数中进行处理,该消息处理函数完 成的功能就是在邮件正文文本框当中显示出邮件的正文。该消息处理函数代码如 下: - / 显示邮件正文 - voidCEmailA nalyseSystemDlg:O nShowBody(NMHDR*pNMHDR, LRESULT* pResult) NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR; POSITION pos = m_ctlMessagesList.GetFirstSele

47、ctedltemPositio n(); if(pos) int nItem = m_ctlMessagesList.GetNextSelectedItem(pos); m_strBody = m_strBodyArray.GetAt(nItem); UpdateData(FALSE); *pResult = 0; 4.4 恶意 Email 处理 恶意邮件已经成为威胁用户安全的主要形式之一, 如何能够做到及时发现恶 意邮件并由用户进行相应的操作已经成为 Email 使用者广泛关注的问题, 同样也 是一个亟待解决的问题之一。恶意 Email 的处理包括两个部分:恶意 Email 的删 除及忽略。

48、 4.4.1 恶意 Email 分析 本文在进行恶意 Email 分析采用的是关键字分析方法,和现在一些常用的方 法一样, 将关键字存储于文件或数据库中, 当要分析 Email 时就从数据库或文件 当中逐个取出关键字并与待分析文件进行比较, 看待分析文件当中是否含有取出 来的关键字,若含有该关键字则初步判定该文件为恶意文件或恶意Email,当然, 不可能一次性就能够列出所有的关键字, 况且关键字是会变化的, 在此时大部分 的分析系统中包含了此关键字, 导致某恶意 Email 发送者发送的邮件被接收方认 定为恶意Email。此时恶意Email发送放就会想方设法地变换关键字,设法将该 邮件顺利地到

49、达接收方。 为了增强系统在此方面的可扩展性, 本文提出了一种将 关键字存储与数据库的方法, 用户可以随时增加关键字, 当然这些关键字不是绝 对的,只是用户认为的含有这些关键字的 Email 为恶意 Email。 通过上述方法来查找恶意 Email 的话可能会出现对于接收方来说发过来的 Email 是很重要的,所以系统不能在判断出恶意邮件之后就直接删除之。若是直 接删除,对于用户来说可能是很大的损失。 所以我们应该把删除权交给用户, 我 们列出的垃圾 /恶意 Email 列表只给用户做一个参考,由用户来看 Email 的来源、 主题等做出正确的判断,有用户决定是否删除该邮件。 恶意邮件分析(扫描

50、)过程如下:当点击“分析”按钮时,系统从存储的所 有邮件信息的集合类当中逐条取出每个成员,即每封Email,再对每封Email进 行分析。对每封 Email 进行分析过程如下:从数据库中逐条取出关键字,将每个 关键字和 Email 的主题及正文进行匹配, 看在 Email 的主题和正文当中是否含有 这些关键字,若找到其中一个,则初步认定该 Email为恶意Email并立即结束该 Email的查找,转入下一圭寸Email的查找。直到所有的Email都分析完成。在分 析过程中没查找到一个恶意 Email就将该Email的来源、主题、时间等信息显示 在相应的Email列表框控件上。 在进行分析时,为

51、了让用户明确知道现在分析的是哪一封Email,在对话框 的最下面会显示进度,效果如图 4-3所示: 皿.I 目_删除 |超喀 | m描芫毕?共检测到E封恶意邮件 图4-3 分析恶意Email效果图 分析部分的代码实现如下: /-分析邮件是否为垃圾邮件 void CTRASHMAILPROCESS:O nAn ysis() / TODO: Add your con trol no tificati on han dler code here /-初始化相关变量及控件 int trash num=0; CStri ng strTrash; trasharray.RemoveAll(); m_tra

52、shMessageList.DeleteAllltems(); /信箱中没有邮件 if(theApp.messageArray.GetSize()=0) AfxMessageBox(信箱为空); return; CString strState; SetDlgltemText(IDC_STATE2,正在扫描:);/ 显示正在扫描 for(int i=0;istrSubject; / 正在扫描的邮件主题 SetDlgltemText(IDC_STATE,strState)显示正在扫描的邮件的主题 /从数据库中选出所有的关键字 _RecordsetPtr m_pRecordset; m_pReco

53、rdset=access.ReadDataBase(select * from keyword); CString strKeywords; m_pRecordset-MoveFirst(); /依次检查邮件的主题和正文中是否含有关键字,若有则为垃圾 邮件 while(!m_pRecordset-adoEOF) strKeywords=(LPCTSTR)(_bstr_t)m_pRecordset-GetCollect(keyword); if(CMessages |(CMessages *)theApp.messageArray.GetAt(i)-strMessageBody.Find(str

54、Keywords)!=-1) /将垃圾邮件显示在垃圾邮件列表中 int nListItem = m_trashMessageList.InsertItem(trashnum,(CMessages *)theApp.messageArray.GetAt(i)-strFrom); m_trashMessageList.SetItem(nListItem, 1, LVIF_TEXT, (CMessages *)theApp.messageArray.GetAt(i)-strSubject, 0, 0, 0, NULL); m_trashMessageList.SetItem(nListItem, 2

55、, LVIF_TEXT,(CMessages *)theApp.messageArray.GetAt(i)-strTime, 0, 0, 0, NULL); trashnum=trashnum+1; /垃圾邮件数 /将垃圾邮件的索引号保存以便以后删除或忽略 strTrash.Format(%d,(CMessages *)theApp.messageArray.GetAt(i)-index); trasharray.Add(strTrash); break; /找到第一个关键字就退出该 Email 的查找,直接进 入下一个 Email 的查找 m_pRecordset-MoveNext(); S

56、leep(80); /显示扫描完成的信息 SetDlgltemText(IDC_STATE2,扫描完毕!); CString info;/扫描信息 info.Format(”共检测到d圭寸恶意邮件,trashnum); SetDlgItemText(IDC_STATE,info); 在查找到恶意 Email 的同时,应该把恶意邮件信息保存起来, 以便删除及忽 略时使用:在删除是要知道待删除 Email的索引号,并且在删除该Email之后要 将该信息从所有的邮件列表集合类中删除该成员,并且要在恶意邮件信息中删除 该Email的相关信息,还要在恶意邮件列表框控件中删除该信息。只有这样才不 会在重复

57、分析时同一封Email重复显示,也不会出现已经删除的邮件在从新进行 分析时还列出为恶意Email。 分析恶意Email的流程如图4-4所示: 图4-4 分析恶意Email流程图 4.4.2恶意Email的删除 在经过系统分析初步认定为恶意 Email后,将准恶意Email列在了恶意Email 列表中,此时用户可以进行删除或则忽略操作。删除操作是用户认定该邮件是恶 意Email或垃圾Email时发生的。而忽略操作是用户认定为系统误判时用于更正 系统的判断的。 在删除恶意Email时不是简单地从邮件集合类当中删除该邮件,而是要从邮 件服务器当中删除该Email。这就要用到jmail动态链接库中的一

58、个方法: DeleteSingleMessage(ID,ID是该邮件在邮件信息指针中的序号,该序号是从1 开始的,与我们习惯的数组从0开始所不同。所以在此应特别小心,以免因程序 编写失误而错误地删除Email。从邮件服务器上删除了该恶意 Email时,若此时 不进行其他的删除操作的话可能会出现问题: 在没有进行重新接收邮件的情况下 再次分析恶意 Email 的话,该封被删除的 Email 会再次出现在恶意 Email 列表框 中,这会给用户造成一种假象,即该恶意 Email 还未被删除。当然这后果还不算 是很严重的,更严重的后果是如果此时用户再次点击删除该恶意 Email 时,程序 会崩溃。因

59、为在进行删除操作时根本找不到该Email。 为了避免上述的严重的后果, 我们必须要删除相关的所有项目而不仅仅是删 除 Email 服务器上的 Email ,我们还应该删除邮件集合类中相应的邮件,只有这 样在再次分析恶意Email的时候就不会再次分析该被删除了的恶意Email。同时 我们也应该在分析一开始就删除垃圾 Email 列表框中所有的垃圾 Email 信息,并 且记录垃圾邮件索引号的集合类中对应的所有成员也应该全部删除, 因为此时要 对所有的 Email 进行重新的分析, 不删除的话就会在列表框中出现重复条目信息 的情况。只有这样才不会给用户带来该邮件没有被删除的假象或者是某些 Emai

60、l 自动复制了,垃圾邮件越来越多的假象。 以下是删除某封恶意 Email 的代码: /删除选中的垃圾邮件 void CTRASHMAILPROCESS:OnDelete() / TODO: Add your control notification handler code here /获得点击邮件的索引号 int nItem; POSITION pos=m_trashMessageList.GetFirstSelectedItemPosition(); if(pos) nItem = m_trashMessageList.GetNextSelectedItem(pos); / long in

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论