一种基于java Web系统的垃圾邮件策略分析和识别系统的设计与实现

获取项目源文件,技术交流与指导联系Q:1225467431

本文主要研究基于java Web系统的垃圾邮件策略分析和识别系统的设计系统,首先介绍了当代国内外常用的邮箱,在针对国内邮箱对其垃圾邮件识别与拦截做调查,研究国内邮箱所常用的识别技术,在对国外技术研究,将两者进行对比。紧接着介绍本系统研究方向,以及所使用的方法和技术,本课题设计就是处理这些垃圾邮件,通过设计来判定邮件的作用,让垃圾邮件进行自毁处理,节约空间。让人们用起来查找邮件更加快捷方便,提高了工作效率。在对本系统所使用的框架结构以及数据库等相关软件进行策略分析。

关键词:Java Web;邮箱;垃圾邮件

Based on Java Web System Spam Strategy               Analysis and Recognition System of a Design

and Implementation

 

Abstract

This paper mainly studies the design system of spam strategy analysis and recognition system based on java Web system. Firstly, it introduces the commonly used mailboxes at home and abroad, and conducts the investigation and identification of spamming and interception in domestic mailbox. Technology, in the study of foreign technology, the two were compared. Followed by the introduction of the system research direction, as well as the methods and techniques used, the subject design is to deal with these spam, through the design to determine the role of the message, so that spam self-destruction processing, saving space. So that people use up to find e-mail more convenient and efficient, improve work efficiency. In the system used by the framework of the database and other related software strategy analysis.

Key words: Java Web;Mailbox;Spam Mail

1 绪 论

1.1 课题研究背景

随着互联网的飞速发展,人们的交流方式从最早的通过邮件逐渐转向了即时通讯和移动通讯(QQ和微信),但是,电子邮件这种较为古老的交流方式在某些场合还拥有着不可替代的作用。而且很多账户的注册依旧依赖邮箱作为一种重要的安全验证方式,同时我们会接到各种各样推送,无论是不是我们需要的,随着注册的越来越多,接到的推送也越来越多,也有越来越多的发错的、攻击性的邮件。经常干扰到我们接受和阅读想要的邮件,并且我们手动处理这下垃圾邮件很浪费时间,所以本课题设计就是处理这些垃圾邮件,通过设计来判定邮件的作用,让垃圾邮件进行自毁处理,节约空间。让人们用起来查找邮件更加快捷方便,提高了工作效率。

1.2 课题研究现状

目前,电子邮件发报系统被全世界人所使用[1]。无论是国外的Outlook、Gmail、iCloudMail还是到国内的网易邮箱、腾讯邮箱、新浪邮箱、189邮箱等等,大体功能都是一致的,目的就是为了用户之间进行电子邮件传输。在垃圾邮件识别技术上,国外邮箱大体都是采用人工智能技术增强垃圾邮件过滤判断,而国内邮箱一般是使用黑名单技术和标题表头的无效字符识别,来进行垃圾邮件判定,显而易见国外的垃圾邮件识别技术要比国内的技术准确很多,不过现在网易邮箱等也在不断更新技术。

随着新一代的图片垃圾邮件出现,垃圾邮件过滤技术也在不断更新发展,其中对发件人主要特点识别技术、图片特点识别技术、意图分析技术等成为最新最主要的过滤研究技术[2]。迄今为止的垃圾邮件过滤技术[3],单靠某一种技术单一手段是无法解决的,如今研究的重要技术都从单一的技术研究转移到了多重技术融合的垃圾邮件过滤技术相研究,使得多重技术整合在进行分层过滤技术成为当今垃圾邮件过滤技术的主流技术。目前,国外在该方面的研究虽然较为靠前,但中国相关企业与高校所研究的技术也并不差[4]。通过专利分析,可以了解相关技术的发展情况和研究的趋势,知晓国内外的研究现状。通过学习,国内应该加大力度在技术研发上,申请研发专利,提高知识产权意识,才能更好地占据市场地位,和国外的技术以及大企业相抗衡[5]。未来的道路还很远,需要不断探索和实践,我国科学领域也应该加大研发程度,力求创新,提高市场核心竞争力。

1.3 课题研究重点和内容

基于以上现状研究、社会调查,本课题研究一个内容为:开发一个功能齐全、系统成熟、基于B/S架构Tomcat部署、采用MySQL数据库和James服务器、针对广大用户垃圾邮件策略分析与识别系统。课题研究重点放在垃圾邮件的过滤与识别的技术上,重视垃圾邮件的拦截技术,该拦截技术采用贝叶斯过滤器,使用贝叶斯算法,针对贝叶斯算法进行研究论证。

2 系统需求分析

2.1 业务需求分析

电子邮件因为在它诞生之后具有的收发便捷和成本低廉的特色得到了人们的喜爱和应用[6]。然而,也正是因为上述两个优点,用户在享受电子邮件的便利的同时,也不得不去面对电子邮件的负面作用。

由此可以看出,越来越多的用户需要一款带有的垃圾邮件拦截功能的电子邮件系统。而且,由目前社会行情来看,电子邮件自毁系统将会越来越受到人们的广大欢迎,并在未来相当长的一段时间内,会吸引越来越多的技术人员开发与研究。

目前,使用电子邮件系统的用户越来越多,并且不同的用户针对垃圾邮件的理解不同,大体可以分为广告邮件、乱码邮件、无效域名邮件、推荐邮件和用户自定义邮件等等,这些邮件都可以被定义为垃圾邮件,对于垃圾邮件的定义就看不同用户对邮件的理解。

通过对身边的一部分同学调研,这些同学大体上都认为垃圾邮件是:广告邮件、乱码邮件、陌生人邮件。通过对身边同事的调查,我对他们分成两类:一类是对新鲜事感兴趣的,平时比较喜欢一些推送邮件,他们对乱码邮件反感,其余的都会查看一下。另一类是平时喜欢购物的,他们对各种广告邮件非常感兴趣,随时随地查看关注的物品动态,所以广告邮件他们不认为是垃圾邮件。而多数老师平时办公繁忙,每天要处理很多的邮件,所以他们对垃圾邮件的理解就是,只要不是好友之间发送的邮件,都称之为垃圾邮件。

针对上面调研所提出的问题,为了满足不同用户的在使用邮件系统时不必要的麻烦,并且分析了国内外对垃圾邮件拦截系统的研究现状的基础上,提出了一个基于Java Web系统的垃圾邮件策略分析和识别系统。 能够对接收到的邮件处理,对不同的邮件进行分类,达到垃圾邮件的关键字识别,从而达到系统拦截垃圾邮件,满足用户的需求。系统能够实现邮件收发,真正的垃圾邮件识别与分类,通讯录好友功能,邮件分类功能,用户信息维护功能等。

根据以上观点分析,得出以下业务流程,如图2.1所示:

 

图2.1 业务流程图

2.2 功能需求分析

1)用户对联系人或好友的要求:用户在登录后可以查看并且可以编辑联系人信息,为了防止当联系人过多时不方便查找,所以,针对联系人应该拥有分组功能,并且用户可以对分组进行修改。首先用户登录系统之后能够查看该用户下的所有联系人或好友,而且还能够对联系人进行操作,如:增加、删除、修改联系人信息等。为了对联系人或好友之间管理方便,要求对联系人进行分组,同时对分组也能够进行操作,如:添加、删除、修改等。为了能够快速的直接查找到联系人,用户要求快速的搜索联系人。

2)用户对信息数据管理的要求:用户在登录系统之后可以修改个人基本信息,如:昵称、手机号、性别、地址等。对密码能够进行修改,密码遗失还具有密码找回功能,并且支持密码找回数据修改。

3)用户对电子邮件发送的要求:用户要求能够对邮件实现发送,在发送电子邮件的基础上还应该一并的实现附件发送,同时还要能发送内容齐全的复杂度高的电子邮件,例如带有附件、邮件内容为非纯文本的邮件等。同时在填写收件人或抄送人以及密送人的时候能够通过通讯录快速添加。

4)用户对电子邮件浏览阅读的要求:对接收到的邮件,用户可以通过收件箱查看邮件,浏览邮件正文同时还应该对电子邮件中的附件进行下载和正文中的图片预览。

5)用户对垃圾邮件拦截的要求:系统开发的总体任务是实现邮件的自毁处理功能,通过算法实现垃圾邮件的识别机制,对广告邮件、损坏邮件进行自动拦截,免去了用户手动处理,节省了很大的时间,用户体验也不会感到烦躁。

2.3 性能需求分析

本系统开发的最初目的就是适用于广大的普通用户,所以在系统设计上必须遵循以下几点准则:

1)时间特性:系统响应时间迅速(<5s)。

2)适应性: 在操作方式、运行环境等发生改变时,系统依旧正常运行。

3)安全性:只有合法用户才能登录并且使用系统,而且对每个用户都有权限设置。对用户信息要加密,保障用户信息安全。

4)可维护性:采用日志记录,记录用户的操作以及错误信息,记录要清晰,方便维护人员管理维护。

3 系统总体设计

3.1 设计思路与方案

根据客户的需求,结合实际情况,确定了设计思路:系统页面实现上尽量保持简单,操作起来方便,视觉上清楚明了,不会让用户有凌乱感[7]。在后台代码上尽量的封装方法和类,使这些方法和类重复利用,减少成本,节约空间,提高代码利用率,在前端框架控件的选择上要做到通用性,能够满足在绝大部分的浏览器上运行,并且不会出现控件纰漏,这样可以确保软件的可维护性和实用性。

3.2 设计方案的论证

3.2.1 软件体系结构的选择

软件体系结构主要分为C/S体系结构、B/S体系结构和混合体系结构这三种。本系统是基于JavaWeb应用开发,完全通过Web浏览器即可实现,所采用B/S体系结构。相比较传统的C/S体系结构,B/S体系结构操作简单,交互性强,无需安装客户端,使用起来也比较方便,维护上只需升级服务器即可。

3.2.2 数据库的选择则

目前,我所接触过并使用过的数据库有Oracle、SQL Server、MySQL、PostgrySQL和SQLite这五种。

Oracle和SQL Server这两款数据库是商业软件,功能很全面,数据存储量大,因为这两款数据库本身过大,安装和配置都很繁琐,不适合中小型应用使用,管理起来也不是很方便。

SQLite是一款小型数据库,功能不够齐全,比较适合Android前端开发使用,没有过多的复杂功能,管理很方便,本系统有多表关联、需要触发器监听器等,所以不适合本系统应用。

MySQL和PostgrySQL是轻量级的开源数据库,功能齐全,操作简单,体积小,速度快,跨平台,很容易上手[8]。这两款数据库都比较适合本系统应用,之前我做的一款软件是采用PostgrySQL数据库,所以此系统我将换用MySQL数据库,MySQL数据库也是目前比较主流的轻量级数据库,很适合中小型系统开发。

3.2.3 开发语言的选择

本系统是基于JavaWeb应用开发,完全通过Web浏览器即可实现,在3.2.1小节中所提到,采用的是B/S架构体系,所以开发语言选择的是Java。而Visual C++工作量大,语句繁琐,没有Java那么多的封装类和方法使用,常用的方法都需要自己编写,所以运用起来很是麻烦。C#语言比较适合于C/S架构开发,对于客户端模式开发很简便,界面代码不需要编写,但是,它写不出来网页的页面,不适合Web应用开发。所以适合Web应用开发的语言就是Java,最主要是Java语言具有跨平台性、面向对象、可移植性和多线程[9]。这些特点是其它语言所不具备的。

3.2.4 开发平台的选择

本系统开发平台环境:

1.硬件环境

华硕笔记本(ASUS A550-VB):

CPU:(英特尔)Intel(R) Core(TM) i5-3230M CPU @ 2.60GHz(2600 Mhz)

主板:华硕 X550VB

主硬盘:120GB(S21VNXAG794475X )

副硬盘:1000GB日立(JD10001V0P1W)

内存:8.00GB(1600 MHz)

显示器:友达 AUO 32位真彩色 60Hz

显卡:NVIDIA GeForce GT 740M

声卡:Realtek High Definition Audio

网卡:Qualcomm Atheros AR9485 Wireless Network Adapter

2.软件环境

操作系统:Microsoft Windows 10 专业版 (64位)

开发工具:eclipse-jee-neon-R-win32-x86_64

数据库系统:mysql-5.5.37-win32

数据库管理工具:Navicat Premium_10_2

浏览器:Internet Explorer 11.0.40

  Microsoft Edge 38.14393.0.0

  Google Chrome 57.0.2987.110 (64-bit)

  Mozilla Firefox 52.0.2 (64-bit)

  Opera 44.0.2510.857 (PGO)

  360安全浏览器 8.1.1.248

  UC浏览器 6.1.2017.204

  QQ浏览器 9.5.410548)

本系统应用最低配置:

操作系统:Windows7/8/8.1/10

浏览器配置:具有Trident/Gecko/Webkit内核的浏览器

3.3 系统总体设计

3.3.1 系统架构设计

基于以上对业务需求的分析以及对设计方案的描述,得出本系统具有以下几点功能设计:

1)用户登录功能。用户通过登录功能可以安全的访问本系统,并且对给用户账号下面的邮件、联系人等进行操作,对用户资料添加安全保障。

2)用户申请注册功能。用户通过注册功能申请到一个[email protected]格式的信箱,作为用户登录本系统的唯一标识,通过申请到的邮件账号可以安全操作本系统。

3)用户密码找回功能。用户密码找回功能是为了满足用户遗失密码之后能够快速的找回密码,以便于登录使用系统。可以通过注册时所设置的密保问题来重设密码,也可以通过注册时所预留的密码提示邮箱找回密码。

4)用户收邮件功能。它包括收件协议,邮件阅读以及附件下载。

5)用户发邮件功能。通过邮件地址发送邮件,还具有转发邮件、密送邮件、抄送邮件、定时发送邮件以及附件上传等功能。

6)用户信件处理功能。系统预设置四个邮件分类箱[10],能过对邮件进行分类处理,预设置的四个邮箱为:收件箱、发件箱、草稿箱和垃圾邮件。而且每一封邮件能够在任意信箱之间相互移动。

7)用户查找功能。用户可以使用查找功能[11],通过关键词模糊搜索对邮件主题、邮件内容、发信人和发信地址这些内容进行查找,便于快速查找所需信件。

8)用户信箱设置。它包括个人基本资料修改、密码修改、密保问题及其答案修改、预留安全邮箱修改。

然后我们在此系统的基础上实现自动删除和销毁[12],通过设置时间,多久后邮件自动删除,当然对于每一封邮件都会有一个默认的时间,客户可以根据自己的需求修改自毁时间。

3.3.2 系统结构设计总图

根据以上B/S架构分析和功能设计得到系统结构设计总图(图3.1所示):

图3.1 系统结构设计总图

3.3.3 子模块功能设计

1)登录功能:在首页实现登录界面,账号密码输入,并进行登录(图3.2所示)。

 

图3.2 登录系统用例图

2)注册功能:通过首页注册超链接,转到注册页面,按照邮箱固定格式进行注册(图3.3所示)。

 

图3.3 注册系统用例图

3)找密功能:通过首页密码找回超链接,转到密码找回功能,通过密保验证重设密码(图3.4所示)。

 

图3.4 找密系统用例图

4)发件功能:通过SMTP协议发送邮件(图3.5所示)。

 

图3.5 发件系统用例图

5)收件功能:通过POP3协议接收邮件(图3.6所示)。

 

图3.6 收件系统用例图

6)信件处理功能:实现收件箱、发件箱、草稿箱和垃圾邮件的邮件存储(图3.7所示)。

 

图3.7 信件处理系统用例图

7)垃圾邮件识别功能:通过大量的邮件让贝叶斯算法进行“学习”,实现垃圾邮件的拦截(图3.8所示)。

 

图3.8 垃圾邮件识别系统用例图

8)信箱设置:实现个人资料修改,密码修改,参数配置,定时发信,签名设置(图3.9所示)。

 

图3.9 信箱设置系统用例图

3.3.4 系统总用例图

根据以上的系统架构模型和子模块用例图,得出总用例图(图3.10所示):

 

图3.10 系统总用例图

4 系统详细设计

4.1 系统的执行流程

 按功能模块划分,展示流程图:

1)登录模块:输入网址进入到系统登录页面,输入账号密码,首先对输入信息的格式进行校验,校验成功后再把数据传到后台,对数据安全校验。图4.1所示:

 

图4.1 登录功能流程图

2)密码找回模块:输入网址进入登录页面,通过“忘记密码”超链接跳转到密码找回页面,输入要找回的邮箱账号对其格式校验,校验成功后输入验证码,验证码验证成功将数据传到后台,对数据进行安全校验,校验成功在跳转到下级页面选择找回密码的方式,根据所选择的找回方式进行密码重置。图4.2所示:

 

图4.2 密码找回功能流程图

3)注册模块:输入网址进入登录页面,通过“现在注册”超链接进入注册页面,按照提示信息填写内容,首先对填写信息进行格式检验,校验成功后对验证码验证,验证成功将数据传到后台,对数据进行安全校验并记录保存数据。图4.3所示:

 

图4.3 注册功能流程图

 

4)发信模块:输入网址进入登录页面,用户通过安全校验后进入系统首页,点击写信按钮进入写信页面,首先填写收信人地址,对其地址进行格式检验,校验成功后在填写文本内容,上传附件等。填写完成后选择保存并发送或者存草稿箱。图4.4所示:

 

图4.4 发信功能流程图

5)收信模块:输入网址进入登录页面,用户通过安全校验后进入系统首页,点击收信按钮进入到收信箱,选择要查看的邮件进行浏览。可以选择快速回复或者转发。图4.5所示:

 

图4.5 收信功能流程图

6)垃圾邮件模块:系统通过接收到的邮件进行自判定,对邮件进行检索敏感词汇,按照要求对邮件进行分类处理,达到垃圾邮件的拦截。图4.6所示:

 

图4.6 垃圾邮件功能流程图

7)修改账户功能模块:输入网址进入登录页面,用户通过安全校验后进入系统首页,点击个人信息按钮进入个人信息修改页面,按照用户自己需求选择要修改的内容,修改内容时对所填写的数据进行安全校验,校验成功后进行数据更改并记录。图4.7所示:

 

图4.7 修改账户功能功能流程图

4.2 数据库设计

本系统采用MySQL数据库来对本系统的数据进行增、删、改、查等操作,在该系统的数据库中共有7张表: 用户表、登录表、密保表、收件表、发件表、草稿表、垃圾邮件表。

4.2.1 数据库E-R图

1)E-R图

 

图4.8 E-R图

2)关系模型

用户(用户表ID,账号,昵称,性别,出生日期)

     主键:用户表ID 

  外键:账号

登录(登录表ID,账号,密码)

     主键:登录表ID 

  外键:账号

密保(密保表ID,账号,密保问题,密保答案)

     主键:密保表ID 

  外键:账号

收件箱(收件箱ID,账号,收件主题,已读邮件,邮件附件,接收IP地址)

       主键:收件箱ID 

外键:账号,收件主题

发件箱(发件箱ID,账号,发件主题,已发邮件,邮件附件,发送IP地址)

       主键:发件箱ID 

外键:账号,发件主题

草稿箱(草稿箱ID,账号,发件主题,草稿邮件,邮件附件)

        主键:草稿箱ID 

 外键:账号,发件主题

垃圾箱(垃圾箱ID,账号,邮件主题,已删邮件,邮件附件)

       主键:垃圾箱ID 

外键:账号,邮件主题

4.2.2 数据库表设计

垃圾邮件策略分析和识别系统数据库中共包含七张表,下面将分别给出这七张表的设计说明和数据表的相关内容。

1)用户表(User)

用户表主要是用于保存用户的基本信息,包括:表的唯一标识ID、用户的账号、昵称、性别、出生日期、用户权限和数据的删除标识。由于该表是主表,具有很多索引,存储数据条目数量庞大,所以表ID采用了长度为20的varchar类型数据并且数据库自动生成,因为该系统使用用户量多,邮箱账号自定义且数量庞大,而邮箱账号长度限制在3到20位,所以账号采用长度为20的varcahr数据类型,昵称最长不可超过20个字符,所以采用长度为20的varcahr数据类型,性别只有男或女,使用长度为2的varcahr数据类型,出生日期将采用MySQL标准的Date类型,权限和删除标识就只有0或1两种状态,所以采用长度为1的varcahr数据类型。由以上数据分析得出用户表(表4.1所示)。

4.1 User表

列名

数据类型

说明

描述

U_Id

varchar(20)

主键,非空,自动生成

User表ID

U_Account

varchar(20)

非空

账号

U_Name

varchar(20)

非空,默认昵称为账号ID

昵称

U_Sex

varchar(2)

可为空

性别

U_BornDate

Date

可为空

出生日期

Permission

varchar(1)

非空

权限

Del_flag

varchar(1)

非空

删除标识

2)登录表(Login

登录表用于保存每个用户的登录信息,方便后台系统统计以及数据的维护,包括:表的唯一标识ID、用户邮箱账号、用户登录密码、登陆时间、退出时间和删除标识。由于该表所保存的数据庞大,所以表ID采用长度为20的varchar类型数据并且数据库自动生成,邮箱账号是User表的外键,所以邮箱账号的限定和User表中的账号一直,同为长度限制在3到20位,采用长度为20的varcahr数据类型,而用户密码限制在了4到20 位,所以密码采用长度为20的varcahr数据类型,登录时间和退出时间将采用MySQL标准时间datetime类型,精确到秒,删除标识只有0或1两种状态,采用长度为1varcahr数据类型。由以上数据分析得出登录表(表4.2所示)。

4.2 Login表

列名

数据类型

说明

描述

L_Id

varchar(20)

主键,非空,自动生成

login表ID

U_Account

varchar(20)

非空

账号

U_Password

varchar(20)

非空

密码

Del_flag

varchar(1)

非空

删除标识

Login_Date

datetime(6)

非空,自动获取

登录时间

Exit_Date

datetime(6)

非空,自动获取

退出时间

3)密保表

密保表保存每一位用户的密保问题及其答案,用于用户找回密码,包括:表的唯一标识ID、用户邮箱账号、密保问题、密保答案和删除标识。由于该表存储数据庞大,所以表ID采用长度为20的varchar类型数据并且数据库自动生成,邮箱账号的限定与User表中的账号一直,所以长度限制在3到20位,采用长度为20的varcahr数据类型,密保问题和密保答案是纯文本格式并没有做限定,所以将采用长度为64的varcahr数据类型,删除标识只有0或1两种状态,采用长度为1varcahr数据类型。由以上数据分析得出密保表(表4.3所示)。

4.3 Protection表

列名

数据类型

说明

描述

P_Id

varchar(20)

主键,非空,自动生成

protection表ID

U_Account

varchar(20)

非空

账号

P_Question

varchar(64)

非空

密保问题

P_Answers

varchar(64)

非空

密保答案

Del_flag

varchar(1)

非空

删除标识

4)收件表

收件表用于存放用户接收到的邮件,包括表的唯一标识ID、用户邮箱账号、收件主题、邮件正文的URL、邮件附件的URL、发件人的IP地址和删除标识。由于该表存储数据量庞大,所以表ID采用长度为20的varchar类型数据并且数据库自动生成,邮箱账号与User表中的账号限定一致,长度限制在3到20位,采用长度为20的varcahr数据类型,收件主题一般都是短短的纯文本,所以采用长度为20的varcahr数据类型,邮件正文、邮件附件和发件人的IP地址存放的都是URL,所以将采用长度为64varcahr数据类型,删除标识只有0或1两种状态,采用长度为1varcahr数据类型。由以上数据分析得出收件表(表4.4所示)。

4.4 Inbox表

列名

数据类型

说明

描述

I_Id

varchar(20)

主键,非空,自动生成

inbox表ID

U_Account

varchar(20)

非空

账号

I_Topic

varchar(20)

非空

收件主题

I_Mail

varchar(64)

可空

已读邮件

I_Adjunct

varchar(64)

可空

邮件附件

I_MailAddress

varchar(64)

非空

接收IP地址

Del_flag

varchar(1)

非空

删除标识

5)发件表

发件箱表与收件箱表大体相同,用于存放用户已发出的邮件,包括:包括表的唯一标识ID、用户邮箱账号、发件主题、邮件正文的URL、邮件附件的URL、收件人的IP地址和删除标识。由于该表需要存储数据信息庞大,所以表ID采用长度为20的varchar类型数据并且数据库自动生成,邮箱账号限定与User表中的邮箱账号一致,长度限制在3到20位,采用长度为20的varcahr数据类型,发件主题与收件主题一致一般都是短短的纯文本,所以采用长度为20的varcahr数据类型,邮件正文、邮件附件和收件人的IP地址存放的都是URL,所以将采用长度为64varcahr数据类型。删除标识只有0或1两种状态,采用长度为1varcahr数据类型。由以上数据分析得出发件表(表4.5所示)。

4.5 Outbox表

列名

数据类型

说明

描述

O_Id

varchar(20)

主键,非空,自动生成

outbox表ID

U_Account

varchar(20)

非空

账号

O_Topic

varchar(20)

非空

发件主题

O_Mail

varchar(64)

可空

已发邮件

O_Adjunct

varchar(64)

可空

邮件附件

O_MailAddress

varchar(64)

非空

发送IP地址

Del_flag

varchar(1)

非空

删除标识

6)草稿表

草稿表用于存放用户编写的邮件,包括表的唯一标识ID、用户邮箱账号、邮件主题、邮件正文的URL、邮件附件的URL和删除标识。由于该表需要存储数据信息庞大,所以表ID采用长度为20的varchar类型数据并且数据库自动生成,邮箱账号限定与User表中的账号一致,长度限制在3到20位,采用长度为20的varcahr数据类型,邮件主题与收件主题一致一般都是短短的纯文本,所以采用长度为20的varcahr数据类型。邮件正文、邮件附件存放的都是URL,所以将采用长度为64varcahr数据类型。删除标识只有0或1两种状态,采用长度为1varcahr数据类型。由以上数据分析得出草稿表(表4.6所示)。

4.6 Manuscript表

列名

数据类型

说明

描述

M_Id

varchar(20)

主键,非空,自动生成

manuscript表ID

U_Account

varchar(20)

非空

账号

M_Topic

varchar(20)

非空

邮件主题

M_Mail

varchar(64)

可空

草稿邮件

M_ Adjunct

varchar(64)

可空

邮件附件

Del_flag

varchar(1)

非空

删除标识

7)垃圾邮件表

垃圾邮件表同草稿表一样用于存放用户删除的邮件,包括表的唯一标识ID、用户邮箱账号、邮件主题、邮件正文的URL、邮件附件的URL和删除标识。由于该表存储数据信息庞大,所以表ID采用长度为20的varchar类型数据并且数据库自动生成,邮箱账号限定与User表中的邮箱账号一致,长度限制在3到20位,采用长度为20的varcahr数据类型,邮件主题与收件主题一致一般都是短短的纯文本,所以采用长度为20的varcahr数据类型。邮件正文、邮件附件存放的都是URL,所以将采用长度为64varcahr数据类型。删除标识只有0或1两种状态,采用长度为1varcahr数据类型。由以上数据分析得出垃圾邮件表(表4.7所示)。

4.7 Dustbin表

列名

数据类型

说明

描述

D_Id

varchar(20)

主键,非空,自动生成

dustbin表ID

U_Account

varchar(20)

非空

账号

D_Topic

varchar(20)

非空

邮件主题

D_Mail

varchar(64)

可空

已删邮件

D_ Adjunct

varchar(64)

可空

邮件附件

Del_flag

varchar(1)

非空

删除标识

4.3 B/S架构程序设计

4.3.1 登录功能设计

系统登录模块主要针对用户登录“垃圾邮件策略分析与识别系统”进行安全性与合法性检查,防止对非法用户进入该系统[14]。在登录时,只有对已存在的、合法的、有效的用户才可以进入本系统。在登录控制时分为两部分[2]:首先,在前端界面上对用户输入的数据进行格式校验,看其格式是否合法,如果检验通过,则向下进行,将输入的数据通过控制程序传入到后台,与数据库中数据进行比较,如果数据比对成功则登陆成功进入系统主页面,否则需要重新输出邮箱账号和密码,进行重新验证。具体操作流程可以参考图4.1登录模块流程图,用户登录电子邮件系统的序列图如4.9所示。业务逻辑实现类类图如图4.10所示,核心编码实现将在5.1.1节描述。

 

图4.9 登录功能序列图

 

图4.10 登录功能类图

4.3.2 密码找回功能设计

找密功能设计主要是为了用户在忘记密码时,通过找密功能可以安全找回密码。用户找回密码分为两种方式,第一种是通过回答安全问题找回密码,第二种是通过安全邮箱重置密码[15]。通过安全问题找回密码是用户输入安全问题的答案,将答案传到后台与数据库中数据校验,校验成功时用户可以填写新的密码。安全邮箱找回密码是通过FindPwdEmail类中的createPwd()方法随机生成的六位的字母和数字的组合密码,然后发送到安全邮箱中,作为下次登录的新密码。用户找回密码可以分为三步[16],第一步:首先对邮箱账号检测,看该账号是否存在,如果存在则执行第二步。第二步:选择找回密码方式,根据个人喜好不同,可以选择回答安全问题找回密码,也可以选择向预留安全邮箱发送随机密码,进行重置密码。第三步:返回登录页面,通过重置的新密码进行登录系统。用户找回密码检查邮箱账号序列图如图4.11所示。具体操作流程可以参考图4.3找密模块流程图,页面设计与相关编码实现将在5.1.2节描述。

 

图4.11 用户找回密码检查邮箱账号序列图

通过回答安全问题找回密码的序列图如图4.12所示。

 

图4.12 安全问题找回密码序列图

通过安全邮箱重置密码的序列图如图4.13所示。

 

图4.13 安全邮箱找回密码序列图

业务逻辑实现类类图如图4.14所示。

 

图4.14 密码找回功能类图

4.3.3 注册功能设计

注册功能设计目的是为新用户第一次使用本系统时为其创建邮箱账号,在注册邮箱账号上做了限定,邮箱账号、邮箱密码通过Jquery进行设置,邮箱账号限定为“3-20位之间,请用字母、数字、下划线、中划线或点号"."”,密码限定为“3-20位字符(字母、数字、符号),区分大小写”。而且在安全邮箱、密码找回问题、密码找回答案等,这些必填选项上带有红色星号作为标识,提醒用户必填。详细信息可以选择性填写,注册时可以不填,可以在系统的个人信息里填写。具体操作流程可以参考图4.2注册模块流程图,注册序列图如4.15所示。业务逻辑实现类类图如图4.16所示。页面设计与相关编码实现将在5.1.3节描述。

 

图4.15注册功能序列图

 

图4.16 注册功能类图

4.3.4 通讯录功能设计

通讯录功能是为了用户更加快捷的发送邮件,填写收件人时不用每次都手动填写邮箱地址,在通讯录中可以添加好友,就可以直接向好友发送邮件。达到了方便、快捷、及时的目的。在通讯录功能中,系统会有五个默认分组,也是一些常用的分组,方便用户体验,用户可以对这些分组编辑,删除,也可以添加分组,目的就是为了很很好的管理好友。此处还设置了搜索功能,支持模糊查询,可以匹配姓名、邮件地址、电话号码等,这样可以更加快捷的找到好友及其详细信息。通讯录序列图如图4.17所示,业务逻辑实现类类图如图4.18所示。页面设计与相关编码实现将在5.1.4节描述。

 

图4.17通讯录功能序列图

 

图4.18 通讯录功能类图

4.3.5 修改账户功能设计

修改账户功能在主页面的个人信息里面,在此处共有四个功能:

1.修改个人基本信息功能:修改进本信息包括昵称、性别、手机号、家庭住址和备注。注册时未填写的这些信息即可在这里填写。

2.修改密码功能:修改密码时需要用户输入原始登录密码和新的密码,并且二次确认新密码,验证码验证成功后对原始密码进行校验,校验通过后,将原始密码更新为新的密码。 

3.修改密码查询问题功能:首先对原始密码查询问题进行答案校验,校验成功后到第二步,第二步选择新的密保问题并填写新的密保答案,验证成功后保存更新。

4.修改密码查询邮箱功能,首先需要进行登录验证,验证成功后填写新的邮箱地址,将原始邮箱地址更新为新的邮箱地址。

具体操作流程可以参考图4.7信箱设置模块流程图,修改账户信息系统的序列图如图4.19所示,业务逻辑实现类类图如图4.20所示。页面设计与相关编码实现将在5.1.5节描述。

 

图4.19 修改信息功能序列图

 

图4.20修改信息功能类图

4.3.6 发信功能设计

发信件首先通过系统主页面里面的写信按钮进入到写信页面,填写收信人的邮箱地址,也可以通过通讯录快速选择的好友的邮箱地址[17]。填写主题,简单的阐述本邮件大体的内容。附件添加,可以把文档、图片、应用等等压缩成压缩包进行上传。填写邮件正文内容,在文本输入框上部有Word插件,支持各种常用字体选择,颜色、大小、格式等等,一些常用的Word功能基本全部支持。在填写收件人时可以选择是否添加抄送人或密送人。发送时可以选择是否保存到“已发送”里和定时发送,如果写完信不想发送也可以保存到草稿箱中[10] [11]。具体操作流程可以参考图4.4发件模块流程图,用户发件系统序列图如图4.21所示,业务逻辑实现类类图如图4.22所示。页面设计与相关编码实现将在5.1.6节描述。

 

图4.21 发信功能序列图

 

图4.22 发信功能类图

4.3.7 收信功能设计

邮件阅读是通过系统主页面上收件按钮进入收件箱页面,收件箱里面包括最近收到未读信件和浏览过得已读信件,可以对信件自定义标记,已读或者未读两种状态,此处添加了查询状态,按照条件进行查询信件,也可以把信件移动到草稿箱、已发送、已删除和垃圾邮件里面[18]。接收到的邮件可以给他人转发,也可以对发件人快速回复。收件箱存放的邮件都是通过贝叶斯过滤器进行筛选之后所保留的非垃圾邮件。具体操作流程可以参考图4.5收件模块流程图,用户收件序列图如图4.23所示,业务逻辑实现类类图如图4.24所示。页面设计与相关编码实现将在5.1.7节描述。

 

图4.23 收信功能序列图

 

图4.24 收信功能类图

4.3.8 邮件拦截功能设计

邮件拦截功能在本系统主页面的垃圾邮件里面[19],和收件箱功能很相似,这里面存放的是系统拦截的垃圾邮件,这些被拦截的垃圾邮件用户选择性浏览[20] ,此功能是本系统的主要开发功能,具体操作流程可以参考图4.6收件模块流程图。在垃圾邮件识别功能上,采用贝叶斯算法,贝叶斯算法是一种统计学算法,建立在已有的统计结果之上。贝叶斯算法主要体现在分类上,能够精准的对相似物品分类,因此在邮件过滤系统中也得到广泛的应用。利用贝叶斯算法实现垃圾邮件过滤系统的基本思想是:将收集到的大量正常邮件和垃圾邮件作为样本,然后通过编写的贝叶斯过滤器对收集到的样本邮件进行训练和学习,最后使用经过培训好的贝叶斯过滤器,对新接收到的邮件进行分类过滤处理。按照垃圾邮件的不同特征,并对其进行不同分类,准确地对垃圾邮件进行过滤。贝叶斯算法综合性能很好,空间复杂度好,占用空间少,而且还可以动态更改词库,改进性能。垃圾邮件拦截序列图如图4.25所示。 

 

图4.25邮件拦截功能序列图

贝叶斯算法是基于概率统计学的,核心公式:P(c|X)=P(X|c)P(c)/P(X) 式中,c表示某种分类,P(c|X)则表示已知X的情况下类型为c的条件概率。我们求出各个类别ci下的P(ci|X),然后比较它们的大小,以概率最大的ciMax作为最后的类别,以此达到分类的目的。为了简化计算量,我们假设各特征之间的关系是相互独立的,这就大大简化了计算量,这种模型被称为朴素贝叶斯模型,而且通过实验证明朴素贝叶斯模型具有较好的过滤性能。假设M是邮件样本集中属于第G类邮件的总数,N表示邮件样本集的总数,则P(C)的计算公式为:P(Ck)=Nk/N。

贝叶斯算法执行流程如图4.26所示。

 

图4.26 贝叶斯算法流程图

文本分词是垃圾邮件过滤系统中比较重要的一个环节,对系统的性能和效率有着很大的影响。分类方法一般分为两类:英文分词和中文分词。

英文分词通过标点符号和空格等非字母字符作为分词依据就能实现,分词方法比较简单。

在中文文本中词语之间是相互连在一块的,不像英文字符那样有比较明显的分词依据,而且中文通常还具有词性、语义和上下文语境等特征,所以中文分词相对来说要比英文分词复杂的多。现在常用的分词方法有:最大匹配法、N-最短路径法、全切分法和基于词频分词法。

将邮件文本内容经过分词处理后,提取出来的词的数量比较大,如果将这些词全部用作特征,特征向量的维数仍然比较大,可以通过对特征项作进一步的选择和提取,得到贡献比较大的特征集,来提高过滤系统的运行速度和程序效率。文本特征的提取和选择就是通过概率的方法构造一个特征函数,通过这个函数把这些词投影到另外一个空间,在这个空间中根据这些特征的值进行选择,提取出新的词集组成特征空间。

为了使系统具有对邮件类型的分类能力,需要先对系统进行训练使系统具有获得对邮件的分类能力。系统的训练模块分为两个部分:系统初始训练模块和系统反馈训练模块。系统初始训练模块是用事先准备好的正常邮件集和垃圾邮件集来来对系统进行训练,使系统具有对邮件分类的能力;系统的反馈模块是系统对邮件进行分类后将邮件加入正常邮件集或垃圾邮件集,对系统进行进一步训练使系统不断的提高对邮件的分类能力,不断适应垃圾邮件的变化。训练模块的流程如下:

(1)将正常邮件集的特征和垃圾邮件集的特征进行分别整理。

(2)分别计算垃圾邮件集和正常邮件集中特征的先验概率。

(3)邮件分类后重新计算垃圾邮件集合正常邮件集中特征的先验概率

(4)形成统计表

训练模块设计框图如图4.27所示:

 

图4.27 训练模块设计框图

系统的分类模块是整个过滤系统的核心模块,此模块是要完成邮件的最终分类功能。贝叶斯分类过程就是一个评分过程,通过对收到邮件的特征进行综合评分,评分大于阈值的则被分为垃圾邮件,反之则被分为正常邮件,并且用户可以根据需要调节这个阈值。本模块还有另外一个功能就是用户分类功能,用户可以根据自己的需要对邮件进行手动分类处理。系统分类模块设计框图如图4.28所示。

 

图4.28 系统分类模块设计框图

贝叶斯算法的实现类类图如图4.27所示。页面设计与相关编码实现将在5.1.8节描述。

 

图4.29 邮件拦截功能类图

4.3.9 邮件删除功能设计

邮件删除功能是为了用户方便管理信件以及对信箱内存的释放,每一封邮件都可以删除,删除又分为两种:第一种,普通删除,删除后将邮件存放在已删除信箱里,方便用户找回,此时该邮件还在此邮箱账号中,并没有释放内存。第二种,彻底删除邮件,把邮件从该账号里永久移除,从而释放信箱内存,方便接收更多的邮件。在已删除信箱里的邮件可以恢复到收件箱里,也可以彻底删除。页面设计与相关编码实现将在5.1.9节描述。

5 系统实现

5.1 主要界面设计及编码实现

5.1.1 登录功能实现

登录系统功能实现步骤如下:

(1) 用户输入网址打开系统,进入登录系统首页(user_login.jsp)。在input框输入邮箱账号和密码,输入之后首先利用前端框架对输入信息的格式进行校验,格式错误用红色字体提示用户错误信息,校验成功后点击登录,将数据传到后台进一步数据校验,此处可以勾选是否免登陆。登录界面如图5.1所示。 

(2) 点击登录时通过AJAX将输入的信息获取,把获取到的数据提交到Controller层中的Servlet控制器。

(3) 通过Servlet控制器中的Action事件配置把数据传到UserLoginAction类中。

(4) 通过UserLoginAction类中登录执行方法调用Dao层的checkUser方法,将从前台获取的输入信息与数据库中的数据校验。

(5) 利用邮箱账号做索引条件通过Dao层从数据库获取User对象,如果该账户在数据库中不存在,则User对象返回空。

(6) 如果获取到User对象,与该账号密码进行数据校验,如果校验成功则用户登录成功跳转到系统首页(user_main.jsp(成功页面如图5.2所示)。否则将错误信息返回到登录页面(user_login.jsp),提示用户(错误信息页面如图5.3所示)。

登录控制页面相关代码:

public int login(String name, String psw) throws {

DBUser s1 = new DBUser();

List namelist = s1.readallID();

int i = 0;

while (i < namelist.getItemCount()) {

System.out.println(namelist.getItem(i));

if (name.equals(namelist.getItem(i))) {

String psw1 = s1.readpsw(name);

if (psw1.equals(psw)) {

return 1;

} else {

return 3;

}

}

i++;

}

return 2;

}

 

图5.1 登录界面

 

图5.2 登录成功界面

 

图5.3 登录失败界面

5.1.2 密码找回功能实现

密码找回系统功能实现步骤如下:

(1) 首先用户通过输入网址进入系统登录页面。

(2) 在密码input框后面有一个找回密码超链接,通过“忘记密码”超链接跳转到密码找回第一步页面(user_find_password1.jsp),如图5.4所示。

 

图5.4 找密第一步页面

(3) 在密码找回第一步页面,进行要找回密码邮箱账号数据校验。

(4) 在页面提交数据后,通过AJAX请求将邮箱名称和验证码数据传到后台控制器类,在AuthCodeActio类中对验证码进行验证。

(5) 如果验证码验证正确则将邮箱名称信息通过控制器传递给UserDao类。

(6) 通过UserDao类中的checkUser()方法将邮箱账号信息有数据库中信息校验,如果该账号存在则数据校验成功。

(7) Servlet接收Dao层反馈成功信息通过Action事件跳转到用户找回密码第二步页面,如图5.5所示。

(8) 在找回密码第二步的页面里选择找回密码的方式。

 

图5.5 找密第二步界面

(9) 如果用户选择第一种找回密码方式:通过密码提示问题找回密码,通过submit将触发事件传到给Servlet控制器。

(10) 通过第一步校验的邮箱账号信息,调用Dao层checkUser()方法,将该账户的密保问题以及答案查询出来,并且通过Action动作跳转到找回密码第三步页面:密码提示问题页面(user_find_byquestion.jsp)。

(11) 在第三步密码找回页面按照密码安全问题填写安全问题答案,并填写新密码以及二次确认新密码如图5.6所示。

(12) 验证码校验成功通过AJAX请求将数据传到Servlet控制器。

(13) 在Servlet控制器中,将收到的密保答案与数据库传过来的答案进行比对校验,校验失败则将失败信息反馈到页面上。

(14) 如果答案校验成功后则将新密码信息通过Dao层update()方法存储到数据库中,并将成功信息返回到Servlet控制器,Servlet控制器触发Action事件跳转到修改密码成功页面,密码修改成功页面如图5.7所示。

 

图5.6 通过安全问题找密界面

 

图5.7 找密成功界面

15)如果选择第二种密码找回方式:密码查询邮箱,通过第一步账户的校验,触发Action事件,向密码查询邮箱发送随机密码,并且跳转到修改密码成功页面,密码修改成功页面如图5.7所示。

控制实现核心代码:

public int passwordModify(String psw1, String psw2){

system x1 = new system();

Tempfile l1 = new Tempfile();

if (psw1.equals("")) {

return 1;

} else {

if (x1.passwordModify2(psw1, psw2)) {

DBUser s1 = new DBUser();

s1.updatepsw(l1.readname(), psw1);

l1.writepsw(psw1);

return 3;

} else {

return 2;

}

}

5.1.3 注册功能实现

注册系统功能实现步骤如下:

1)首先用户通过输入网址进入系统登录页面。

2)点击登录页面右下角的“现在注册”超链接触发跳转事件,跳转到注册页面(register.jsp),图5.8所示。

3)按照页面提示,用户逐步填写数据,且带有红色星号标识的为必填选项,如果漏填有提示警告如图5.9所示。

4)用户输入完数据,利用Jquery框架对数据进行格式校验,格式错误用红色字体提示用户错误信息图5.10所示。

5)点击详细信息超链接可以展开详细信息填写界面,图5.11所示。

6)验证码校验成功后,通过AJAX请求将用户输入的数据传到Servlet控制器,触发Action动作调用Dao层save()方法将数据存储到数据库中,并且跳转到注册成功页面。

控制实现核心代码:

public boolean checkUser(String username) {

User user = find(username);

if (user != null)

return true;

return false;

}

public User find(String username) {

return usersDAO.find(User.class, username);

}

 

图5.8注册界面

 

图5.9漏填提示界面

 

图5.10格式错误提示界面

 

图5.11详细信息界面

5.1.4 通讯录功能实现

通讯录功能实现步骤如下:

(1) 用户通过登录系统安全校验后,进入系统首页(user_main.jsp)。

(2) 用户点击通讯录按钮,触发submit事件,将用户信息提交到Servlet控制器。

(3) Servlet控制器触发Action动作,将用户信息传到Dao层。

(4) Dao层调用checkUser()方法从数据库中获取该用户的联系人详细信息,并将这些信息封装成一个List容器,将结果在返回给Servlet控制器。

(5) Servlet控制器在通过Action事件将包含信息的List容器反馈给联系人页面(user_linkman_main.jsp)。

(6) 联系人页面(user_list_linkman.jsp)将得到的List容器进行解析,将解析之后的数据反馈给用户,联系人具体信息列表页面如图5.12所示。控制层核心代码如下:

public int userAdd1(String name, String psw1, String aut){

DBUser s1 = new DBUser();

List namelist = s1.readallID();

int i = 0;

while (i < namelist.getItemCount()) {

if (name.equals((String) namelist.getItem(i))) {

return 3;

}

i++;

}

if (aut == "admin" || aut == "emp") {

s1.register(name, psw1, aut);

return 2;

}

图5.12通讯录界面

(7) 用户进入到通讯录页面并点击添加联系人触发跳转事件,跳转到添加联系人页面(user_add_linkman.jsp),图5.13所示。

图5.13添加联系人界面

(8) 按照页面提示要求填写信息,点击确定时触发submit事件,通过AJAX请求将数据传到Bean类。

(9) 将联系人的信息在Bean类中进行封装,将封装后的信息传到Servlet控制器。

(10) Servlet控制器触发Action动作,通过调用Dao层的save()方法将信息存储到数据库中,并且将成功信息反馈到成功页面。

5.1.5 修改账户功能实现

修改账户功能实现步骤如下:

(1) 用户通过登录系统安全校验后,进入系统首页(user_main.jsp)。

(2) 用户点击个人信息按钮,触发跳转事件,跳转到修改信息页面(user_set_info_welcome.jsp),图5.14所示。

 

图5.14个人信息界面

(3) 点击修改个人基本信息超链接触发跳转事件,跳转到修改个人基本信息页面(user_set_info.jsp),图5.15所示。

 

图5.15修改个人基本信息界面

(4) 按照提示消息填写数据,点击确定后触发submit事件,通过AJAX请求将数据传到Servlet控制器。

(5) Servlet控制器触发Action动作,调用Dao层update()方法对数据库中的数据进行修改。

 (6) 点击修改密码超链接触发跳转事件,跳转到修改密码页面(user_reset_password.jsp),图5.16所示。

 

图5.16修改密码界面

(7) 按照提示消息填写原始密码和新密码以及二次确认新密码,输入完之后通过Jquery对格式校验,校验成功后进行下一步。

(8) 点击确定后触发submit事件,通过AJAX请求将数据传到Servlet控制器,触发Action动作将原始密码信息传到Dao层。

(9) 调用Dao层checkUser()方法从数据库中获取密码信息,与传入的密码进行校验,校验成功反馈到Servlet控制器。

(10) Servlet控制器在触发Action动作,调用Dao层update()方法将新密码信息跟新到数据库中,并且触发跳转事件,跳转到修改成功页面。

 (11) 点击修改密码查询问题超链接触发submit事件,将该用户账号信息通过Servlet控制器触发Action动作,调用Dao层checkUser()方法,从数据库中把密码查询问题及其答案查询出来。

(12) 将查询出来信息反馈给Servlet控制器,在触发Action动作将查询信息返回到修改密码查询问题页面(user_reset_question.jsp),并且跳转到该页面,图5.17所示。

 

图5.17修改密码查询问题界面

(13) 输入答案点击下一步,触发submit事件,通过AJAX请求将答案传到Servlet控制器。

(14) Servlet控制器触发Action事件,将接收到的答案与之前从数据库中查出的答案信息进行校验,校验成功后将成功信息反馈给修改成功页面。

 (15) 点击修改密码查询邮箱超链接触发submit事件,将该用户账号信息通过Servlet控制器触发Action动作,调用Dao层checkUser()方法,从数据库中把密码查询邮箱地址查询出来。

(16) 将查询出来信息通过Servlet控制器,触发Action动作反馈给修改密码查询邮箱页面(user_reset_pwdemail.jsp),并且跳转到该页面,图5.18所示。

 

图5.18修改密码查询邮箱界面

(17) 输入登录密码和新密码查询邮箱,通过Jquery框架对登录密码和新密码查询邮箱格式校验,校验成功后进行下一步。

(18) 点击确定触发submit事件,通过AJAX请求将输入信息传到Servlet控制器。

(19) 通过用户账号调用Dao层checkUser()方法,从数据库中将该用户的登录密码和密码安全邮箱查询出来,并且反馈给Servlet控制器。

(20) 将从数据库中查询出的登录密码与输入密码校验,校验成功后再触发Action动作,调用Dao层update()方法将新邮箱地址更新到数据库中。

5.1.6 发信功能实现

发信功能实现步骤如下:

(1) 用户通过登录系统安全校验后,进入系统首页(user_main.jsp)。

(2)用户点击写信按钮,触发跳转事件,跳转到写信页面(user_send_mail.jsp),图5.19所示。

 

图5.19发信界面

(3) 用户填写收件人时可以通过右侧通讯录快速选择, 将通讯录中的好友及其邮件地址快速填入到收件人地址栏中,图5.20所示。

 

图5.20添加收件人界面

(4) 用户点击上传附件触发submit事件,调用Servlet控制器中的FileUploadAction类,对文件进行上传,并触发Action动作将上传信息反馈给发信页面,图5.21所示。

 

图5.21上传附件界面

(5) 用户输入邮件正文,通过上方控件对字体修改,图5.22所示。

 

图5.22插件界面

(6) 信息填写成功之后点击发送,触发submit事件,通过AJAX请求将数据传到Servlet控制器。

(7) Servlet控制器触发Action动作调用Dao层save()方法,将数据信息存储到数据库中,并将成功信息反馈给发送成功页面。

控制实现核心代码:

 public String sendemai() {

MailBean mailBean = setMailBean();

SendMail mail = new SendMail(mailBean);

MimeMesasige message = mail.createMeassige();

mail.sendMail(message);

if (mailInfo.getSended()) {

ReceiMail receiMail = new ReceiMail(useradmin.getName(),pwd);

Message m[] = { message };

return "sendaailSuccessis";

}

5.1.7 收信功能实现

收信功能实现步骤如下:

(1) 用户通过登录系统安全校验后,进入系统首页(user_main.jsp)。

(2) 用户点击收信按钮,触发submit事件,通过AJAX请求将邮箱账户信息传到Servlet控制器。

(3) Servlet控制器触发Action动作,通过邮箱账号调用Dao层checkUser()方法,从数据库中将接收邮件信息获取出来。

(4) 在通过Action动作将邮件信息反馈给收信界面,并跳转到收信页面(user_receive_mail.jsp),图5.23所示。

 

图5.23收信界面

(5) 用户点击邮件触发submit事件,通过AJAX请求将邮件主题信息传到Servlet控制器,对邮件主题及邮件地址分析。

(6) 触发Action动作通过James服务器调用邮件接收协议,从James服务器上获取邮件详细信息。

(7) 在通过Servlet控制器将邮件详细信息反馈给邮件阅读页面,并且跳转到邮件阅读页面(user_read_mail.jsp),图5.24所示。

 

图5.24邮件阅读界面

(8) 阅读完邮件可以快速回复,在快速回复文本框中输入文字,点击发送,触发submit事件,通过调用发信方法将邮件内容和回复文本发送出去。

(9) 点击转发按钮触发submit事件,通过调用发信方法将邮件内容存放在写信页面,点击发送并返回成功信息。

5.1.8 邮件拦截功能实现

邮件拦截功能实现步骤如下:

(1) 用户通过登录系统安全校验后,进入系统首页(user_main.jsp)。

(2) 通过ReadMail()函数读取邮件内容数据。

(3) 获取邮件内容后调用函数TextSegmentation()来实现中文分词功能、英文分词功能和其他文本分词的处理,中文分词功能比较复杂,本文采用中科院计算所编写的汉语词法分析系统ICTCLAS来实现,英文分词功能比较容易实现,通过一个子函数来实现。

(4) 分词之后在调用过滤系统的训练模块TrainModule()函数,实现特征词的先验概率计算并形成统计表。

(5) 最后调用ClassificationModule()函数进行邮件分类,触发Action动作将邮件信息反馈给收信界面,并跳转到收信页面(user_receive_mail.jsp),图5.25所示。

图5.25邮件拦截界面

控制层核心代码:

 public ArrayList<ArrayList<String>> BysDate(){  

  ArrayList<ArrayList<String>> datas = new ArrayList<ArrayList<String>>();  

  BufferedReader rdr = new BufferedReader(new InputStreamReader(System.in));  

        String str = "";  

        while (!(str = rdr.readLink()).equals("")) {  

            String[] tokenizer = str.split(" ");  

            ArrayList<String> s = new ArrayList<String>();  

            for(int i=0;i<tokenizer.length;i++){

                s.add(tokenizer[i]);

            }

            datas.add(s);  

        }  

        return datas;  

    }  

5.1.9 邮件删除功能实现

删除功能在每一个信箱的顶部(图5.26)和每一封邮件的顶部(图5.27),分为删除和彻底删除,彻底删除就会从这个邮箱里删除,并且不会恢复。

 

图5.26 删除截界面

 

图5.27删除界面

已删除的信件存放在“已删除”信箱里,这里面邮件是可以恢复为正常邮件,图5.28所示。

 

图5.28删除界面

5.2 系统部署

系统部署数据库服务器端安装MySQL数据库,在本地安装Navicat,并且新建一个名为email的数据库[19]第一次运行程序即可在数据库中创建表及其表结构。MySQL是轻量级的开源数据库,功能齐全,操作简单,体积小,速度快,跨平台,很容易上手,它是目前比较主流的轻量级数据库,很适合中小型系统开发。

Web服务器用Tomcat部署,因为Tomcat是Apache发布的一款开源服务器,市面上比较流通,适合在中小型系统使用,对于这种免费软件是最受欢迎的,也是每一个开发人员的首选。并且Tomcat是绿色软件,免去了安装麻烦,配置简单,上手容易,所以本系统服务启动端采用Tomcat部署。Tomcat在程序中部署如图5.29所示:

邮件收发SMTP/POP3等协议通过James服务器部署,这个Jamas服务器是Apache中的一款开源服务器,它把SMTP、POP3等等相关的邮件收发协议都包含在其中,是一款很不错的免费服务器,是开发邮件系统最为主要的服务器。配置James服务器要把smtpserver、pop3server和dnsservice里面的域名与IP地址修改,还要把链接数据库的database.properties文件修改。 James服务器配置成功后运行bin里面的run.bat文件,运行成功之后利用cmd登录服务器,图5.30所示:

 

图5.29 Tomcat部署

 

图5.30 James服务登录

系统调试与测试

6.1 系统调试

本系统是采用Java语言JavaEES平台开发,开发软件采用的是neon 版的Eclipse,系统环境用的是Microsoft Windows 10 专业版 (64位)JDK选择的是jdk-8u51,由于所选择的的都是最新版本,所以存在着一些兼容性问题,比如:我的JDK是1.8,web、JPA、JavaScript、JavaServer等等,版本选择的都是最新版本,对于老版本会存在向下兼容的问题,像HashMap方法,在JDK1.6之前就不支持,JDK1.6和JDk1.7版本中HashMap要写形参,而在JDK1.8中就不需要写形参,可以直接调用。版本最新也不是最好的,肯定会存在一些不可避免的编译时异常和运行时异常,当然最高版本会有很多新的方法,或者以前的方法可以简略使用,所以这些东西都是有利有弊的。

在配置数据库连接上也出现过问题,由于我的MySQL服务器是装在虚拟机中,所以连接数据库需要远程连接,而每次重启虚拟机它的IP地址都会改变,每次都需要将连接池中的链接地址更新。我寻找到一种简单的修改方法:将虚拟机网络模式改成仅主机模式,将IP地址写死,不让其自动获取,每次重启虚拟机IP地址就不会更改,这样连接池中的链接地址不用每次修改。但是也会存在缺点,这样修改之后服务器内部无法访问外网。

6.2 系统测试

6.2.1 兼容性测试

本系统开发平台的操作系统是Windows 10,所用的首选浏览器是Google Chrome浏览器,由于Google Chrome和Safari的内核都是WebKit,这两款浏览器都是WebKit内核的典例,并且Google Chrome相对来说比较主流,没有太多的限制要求,所以我选择了Google Chrome浏览器。本系统主开发就是在Google Chrome浏览器运行的,在其他浏览器也做过兼容性测试,Trident内核的浏览器我选择Internet Explorer和Microsoft Edge 这两款浏览器,Gecko内核的浏览器我选择Mozilla Firefox浏览器,Presto内核的浏览器我使用的是Opera浏览器。选择这些浏览器的目的就是对前端页面及控件的测试,查看这些控件在众多浏览器中支持与否,如何调节等等。比如:Opera浏览器就不支持上传附件的控件,图6.1所示[20]。在写邮件正文内容,Opera浏览器和Chrome浏览器不支持直接粘贴,需要在粘贴框中粘贴,然后才能粘贴到正文内容中,图6.2所示,Mozilla Firefox浏览器支持在文本框中直接粘贴,不支持粘贴框粘贴,而Microsoft Edge浏览器这两种粘贴方法都支持。

 

图6.1 Opera浏览器测试

 

图6.2 粘贴测试

6.2.2 运行测试

下面对运行成果做一些展示,收件测试图6.3所示。垃圾邮件拦截测试效果图6.4所示。

 

图6.3 收件测试

 

图6.4 垃圾邮件测试

由图6.4可知,发送的乱码的垃圾邮件等等会被直接拦截到垃圾邮件信箱里面,可供用户选择性保留或删除。

6.2.3 安全性测试

在数据库Login表中存储用户的登录信息,其中密码要进行加密。为了防止非法用户破解数据库,避免账号密码等信息泄露,所以必须要有相应的加密措施。

经过安全测试发现,本软件对数据库中用户密码信息进行了严格的加密,而且无法破解,基本上不存在泄露用户密码的可能,因为加密函数password()是不可逆的,只能随机生成一串字符串,而且是无序的。相关测试截图如图6.5所示。

 

图6.5密码加密测试

 

 

 

 

 

 

 

在本课题的研究过程中,本人第一次练习使用SSH框架开发项目。整个项目的需求分析、原型设计、功能设计、系统评估、代码编写和集成测试等全由本人一人独自完成。在整个系统的研究分析过程中,对开发的各个流程都是深入分析,并且每开发一次流程做一次调研,以达到用户的理念。该系统的优点:基于java Web系统的垃圾邮件策略分析和识别系统是一个界面简洁、功能齐全、操作容易、维护方便的邮件系统,该系统安全性高、数据存储读取全程加密,而且具有良好的邮件收发功能,还支持垃圾邮件自动过滤,后期维护也非常简单,是一款非常不错的通讯软件。基于James邮件服务器而开发的系统,在系统安全性、数据保密性、网络传输性都有一定的保障,使电子邮件系统能够安全的运行,让用户体验具有安全感。

当然本系统开发到如今,也存在一定的缺陷,要真正运用于实际,还需要对一些功能添加复杂度,修复潜藏的BUG。首先,本系统的邮箱地址域名是没有通过网上注册的,所以该域名是无法向外网发送邮件的,当然也接收不到邮件。基于java Web系统的垃圾邮件策略分析和识别系统在进行系统分析和设计时,由于受开发时间、自身技术及所掌握功能复杂度的限制,功能实现上没有达到理想的底部,灵活性也并不高。另外,由于开发时间紧迫,有些预想的功能并未能实现,系统整体上有待改进。

通过对垃圾邮件策略分析和识别系统的整体设计与开发,使我在服务器配置、环境搭配、SSH框架运用、数据库设计与使用、系统功能分析、原型设计和编写代码上有了很大的提升。

 

 

 

 

 

 

 

 

 

 

 

 

参考文献

[1] 东箭工作室.电子邮件完全手册[J].清华大学出版社.2006,1 

[2] 张孝祥.Java邮件开发详解[J].电子工业出版社,2007,4. 

[3] 尚涛.一种高准确率的垃圾邮件识别方法[J].北京航空航天大学电子信息工程学院,北京100191.

[4] 罗婧雯.垃圾邮件过滤技术论述[D].国家知识产权局专利局专利审查湖北中心

[5] G.On using SVM and Kolmogorov complexity for spam filterin[J].Six Edition. 

[6] 李志敏.垃圾邮件识别及处理技术研究[M].北京理工大学出版社

[7] 张宗耀.《计算机网络与办公自动化》[M].西安电子科技大学出版社大学学报.2005,29(4):29—32. 

[8] 别玉玉, 刘飞, 张书伟. 贝叶斯垃圾邮件过滤算法的改进与实现[J]. 微计算机信息, 2011, 27(3):167-168.

[9] 滕大祝.基于贝叶斯算法的垃圾邮件识别与过滤技术研究[D].南京工业大学, 2007.

[10] 丁岳伟.基于SMTP协议电子邮件的还原[J].小型微型计算机系统,2002, 23(3):290-293.

[11] 曹麒麟.张千里.垃圾邮件与反垃圾邮件[M].人民邮电出版社, 2003.

[12] 徐春玲.改进的贝叶斯分类对垃圾邮件识别探讨[J].现代商贸工业,2009, 21(24):269-270.

[13] 贾云刚.垃圾邮件过滤技术研究[J].通信与信息技术.2009(2):55-58.

[14] 郑冬冬,宋顺林.图片垃圾邮件过滤技术综述[J].计算机工程与,2010,31(1):41-44.

[15] 王斌,潘文峰.基于内容的垃圾邮件过滤技术综述[D].中国科学院计算技术研究所,2004. 

[16] 蒋秋香,叶苗,麦范金.垃圾邮件过滤技术的发展与现状[J]. 电脑知识与技术:学术交流,2007,4(21):708-709.

[17] 杨康.Java邮件系统的设计与实现[C].吉林.东北大学出版社,2013

[18] 徐超.基于Java电子邮件系统[C].吉林大学出版社,2013

[19] 杨磊.基于Java web的邮件管理系统设计[C].厦门理工出版社,2016

[20] 赵强.电子邮件系统的设计与实现[C].华北电力出版社,2015

猜你喜欢

转载自www.cnblogs.com/mujawfm/p/12702582.html