基于Web邮箱的邮件系统

题目: 基于web的邮件收发系统设计与实现

摘 要
计算机的应用已经越来越广泛,它从产生到完善已经差不多有50年左右的历史,更新换代速度非常快,在人们生活、工作中都发挥了不可替代的作用,几乎所有行业都离不开它,已经成为了人们工作中不能缺少的一部分。此次程序采纳JSP动态技术,通过MyEclipse开发工具,代码方面运用了JavaSE的若干工具包,引用了SUN公司开发的开源的JavaMail包作为系统开发的技术基础。采用了SMTP协议与POP3协议连接对应服务器。采用MySql数据库对数据存取管理。通过B/S模式研究研制这一系统。在对SMTP、pop3协议的熟悉和理解在,运用ssh框架对系统进行开发。开发出基于C/S结构下的简易邮件系统,能完成邮件的发送、接收、以及附件处理功能等。
本系统在互联网的环境中进行测试。系统能成功实现登录邮箱、发送邮件、接收邮件、管理邮件等功能,测试完全通过,基本功能已经实现
关键词:POP3协议;SMTP协议;电子邮件;
Abstract
With the gradual popularity of the network, the application of Email in people’s lives is becoming more and more extensive. In addition to the professional mail service system, the general large websites and units provide email services. Therefore, through the familiarity and understanding of SMTP,pop3 protocol, as well as the mastery of JSP programming and web design skills, a simple mail service system based on C / S structure is developed. It can complete the mail sending, receiving, as well as attachment processing functions etc. The main software used is Eclipse, MySql. In JAVA environment, using JSP programming to realize mail. The various functions of the system mainly supports the authentication of users, and users can enter the system only after correct registration. You can check your own mail in the system or send it to any mailbox, and you can send attachments when you send it.
Through the study and research of this subject, I have mastered the basic web programming skills, and practice my practical ability. At the same time, it is recognized that with the rapid development of information technology, the efficient, fast and convenient mail system will be paid more and more attention and used by more and more people, and it will bring more convenient and faster life to people.
Key words: POP3;SMTP;The E-mail

目 录

完成时间 2019年05月20日 II
摘 要 III
Abstract IV
目 录 V
第1章 绪 论 1
1.1 课题背景 1
1.2 国内外的发展趋势与现状 1
第2章 系统分析 3
2.1系统需求分析 3
2.2系统的可行性分析 3
2.3.相关协议及开发工具 4
2.3.1 SMTP协议 4
2.3.2 POP3协议 4
2.3.3 JSP技术简介 5
2.3.4 Eclipse简介 5
2.3.5 JAVA开发语言 5
第3章 系统设计 7
3.1系统模块的功能图 7
3.2实体之间的关系E-R图 8
3.3数据库结构设计 8
3.3.1系统信息配置表 9
3.3.2用户表 9
3.3.3邮件信息记录表 10
第4章 系统详细设计与实现 11
4.1系统流程说明 11
4.2 用户管理模块 12
4.3 邮件发送模块 16
4.4 邮件接收模块 19
第5章 系统测试与评价 23
5.1测试用例编写规则 23
5.2测试用例 23
表5.1功能测试用例 23
5.3部分测试结果演示 24
5.3.1用户登录测试 24
5.3.2邮件撰写功能测试 25
结 论 27
参考文献 28
致 谢 29

第1章 绪 论

1.1 课题背景
我国已经逐步迈入5G时代,其中信息产业的飞速发展是最大的推动力,软件作为现代数据信息的重要支撑形式,发挥着越来越重要的作用。并且在当今社会,随着我国改革开放的深入,市场经济飞速发展,人们对于信息技术信息交流的使用也是越来越频繁,传统的纸质信的方式已经不现实,最近新兴发展起来的QQ、微信、MSN等实时性太强,并不是所有人都一直有时间守着手机或者电脑来等候消息,而过一段时间没看一些重要的消息有可能会被覆盖掉,所以对于一些重要的信息,或者说一些大公司之间的交流,还是会以电子邮件为主,比如现在最流行的招聘就是透过电子邮件发送简历,公司通过电子邮件发送面试通知和offer等。电子邮件通常也被称之为E-mail,通常传输的时候主要的标志符是@。电子邮件市值也是将传统的纸质性质的信封给电子化了,并且就电子邮件的成本来说,价格非常低,传输速度方面也非常快,能够以最少的人力物力迅速的传遍世界的每一个有信号角落,并且电子邮件能够传输各种加载有信息的载体包括文字、图片等信息。由于电子邮件的优良性能,电子邮件已经在全世界范围得到了推广,并且使用的企业,人数都有了显著的提升[1]。
电子邮件的发现以及推广运用,极大地方便了人们的日常生活。对于企业来说,促进了企业的员工以及管理层之间的交流,并且特有的OUTLOOK电子邮件保证了公司的秘密不被泄露出去。对于整体的社会经济效应而言,电子邮件能够以最少的人力物力迅速的传遍世界的每一个有信号角落,极大地促进了经济的发展。
1.2 国内外的发展趋势与现状
如今电子邮件在互联网上的作用不仅仅只是信息的交流,从某种意义上来说,它已经可以成为你在互联网上的身份证。在日常上网行为的使用上,如果你没有一个电子邮件账号,可以说是寸步难行,因为由于互联网的发展,电子邮件也已经发展的越来越稳定和安全。当你在各大运营网站在注册账号时,填写电子邮件地址信息已经成为了与填写身份证号一样的必填信息之一。电子邮箱如今已经成为全世界最普遍的一种应用。在中国这个发展中国家,网民大约占了人口的1/7,人均使用邮箱量就有4.5个。电子邮件凭借着其独特不可取代的信息传递方式,今后的发展只会越来越好,越来越便利[2]。
1965年,电子邮件诞生在美国麻省理工学院。在1971年,被称为电子邮件之父的Ray Tomlinson,开发了个专门用于计算机与计算机之间信息传递的系统。此系统用@作为地址标识符,通过ARPANET也就是当今互联网的前身,发出了世界上第一封电子邮件。这个最原始最简易的计算机与计算机的信息交流方式,成为世界上第一个互联网应用,给互联网的蓬勃发展奠定了基础[3]。
在70年代,电子邮件刚刚诞生,电子邮件系统的协议没有一个统一的标准,所以有许多基于互联网的Email传输的协议,这些协议鱼龙混杂,各有各的优势,各有各的缺点,但是过于复杂的传输协议是不利于电子邮件的开发与发展的。因此,人们不满足于现状急切需要一个,功能全面并且稳定安全,容易学习又有利于开发者的利用的专门基于电子邮件的传输协议。不负众望在80年代,RFC772文件中发布了电子邮件的传输协议。从此电子邮件系统统一了传输协议的唯一标准。通过人们的实践并且改进。世界上基于电子邮件传输唯一标准协议终于诞生了,也就是:SMTP协议。国内的电子邮件发展,1987年有着“中国互联网第一人”之称的钱天百发出了中国的第一封电子邮件,内容虽然简单但是意义重大,内容为:穿越长城,走向世界。这也为中国国人走向世界奠定了基础。但是当时电子邮件还只是少数人的独木舟,真正将电子邮件平民化的还是163.net也就是中国第一个电子邮局,它是中国人设计的第一个免费的邮箱系统[9]。通过不断地发展,在10年前的曾经,Email这个网络词汇风靡全国。随着互联网在全国范围内的普及,各个互联网公司都看中了电子邮件的发展潜力,于是纷纷开始建立自己独有的电子邮箱服务器,并且面对所有人免费开放。其中网易、腾讯、新浪等等公司脱颖而出,成为中国如今的主流电子邮箱服务器供应商[4]。

第2章系统分析

2.1系统需求分析
在对一个系统进行开始开发时,首先我们要对该系统的应用场景以及用户需求进行市场调研。只有在了解了用户需求和市场背景的情况下,才能确保应用软件系统的可行性。对用户的需求和市场背景进行需求分析对系统的研发和以后的发展至关重要。搜集用户的需求,从用户的需求中分析出软件的各个功能。总而来说,就是将用户的需求转化为软件要实现的功能,达到用户想要的效果。邮件系统主要是对邮件的管理,通过对用户的管理将用户信息保存在系统中,在系统中通过用户的邮箱号进行发送邮件。该系统适用于小型企业的内部信息通信。满足公司内部员工的工作事项交流。因此该系统在用户需求上和市场背景上都是可行的。
2.2系统的可行性分析
(1)技术可行性:
科技不断向前发展,计算机的功能越来越丰富,已近逐步渗透到社会生活的各个角落,对各个行业来说都是不可缺少的一个重要工具。它的功能之多,作用之强大,人们利用它进行文字处理、图形设计、信息储存、信息查询、图像处理、休闲放松等。在快步伐的今天,人们利用计算机能够完成各种各样的难易程度不同的工作,但是,我们即便说计算机非常智能化,各种不同的软件可以帮助我们实现多种不同形式的需求,但是也有可能还不能解决一些人或者群体特别的需求,因此相关领域的人或者群体就要去自己研制开发一些针对性极强的软件,以此来完成自己的工作[11]。用当前稳定的框架,可以提供系统的源代码,这样在遇到问题时也可以在网上找到对应的资料参考,而且在开发方面有许多资料可以给我们提供技术支持[5]。
(2)经济可行性:
通过成本/效益分析法对计算机程序进行分析,一般来讲,在进行需求分析后,对系统的开发成本进行评估;再对系统进行系统设计和分析评估出系统的节省和利益,将成本与利益相比较,当成本小于利益事,就认为该系统是可行的。除此之外,如果有其他特殊要求或原因,则认为该系统开发是不可行的。本系统的实现是为了考核学生的能力,所以不存在经济可行性的问题。
(3)操作可行性:该系统设计的各个功能十分清晰,从用户的体验角度,对各个功能进行划分,图形界面化的操作符合当前人们的操作习惯,在具备有计算机基本操作能力的人来说,该系统在操作可行性上是可行的。
综上所述,本系统的实现是可行的。
2.3.相关协议及开发工具
2.3.2 POP3协议
POP3协议的英文全称是:Post Office Protocol version3, 翻译过来就是邮局协议第3版。POP3采用的是C/S架构的通讯模型,它一般被用来接受邮件。POP3的监听默认的端口号是110。在工作过程中有三种状态,分别为认证状态,处理状态,与更新状态。状态的更新取决于其发送的请求或者是接受的响应。
POP3协议状态变更过程。当发送端用户通过SMTP协议与接受端已经成功建立连接的情况下,它的状态是认证状态。一旦用户的身份被接受端确认之后,认证状态立即回转变成处理状态。在用户的各种操作执行完毕时候,用户发送端会发出QUIT请求,立即回释放连接状态。保证不会占用过多内存资源。
POP3也是TCP/IP协议的一部分。与TCP/IP不同的是POP3只用在邮件的接受。作用非常单一,但是极为常用。这也是邮件收发的安全与稳定奠定的基础。
2.3.3 JSP技术简介
JSP技术被广泛的运用在大小型网站建设上,特别是新闻网站发布系统。之所以运用的这么广泛,是因为JSP能通过标签写在HTML中,运行在服务器之后,可以通过代码的生成HTML。JSP(Java Server Page服务器网页) 是从90年开始出现的新技术。由Sun公司首倡、许多公司参与一起创建的一种动态网页技术标准[6]。它可以在程序运行状态下按照代码逻辑的将JSP解析为html,同时html运行在浏览器上将信息展示出来。通过JSP来实现各种不同的功能,我们可以通过编写一定出具有一定逻辑代码在服务器上运行,达到我们想要的效果[12]。
2.3.4 Eclipse简介
Eclipse是一个非常优秀的java开发IDE,而且其免费开放源代码的特点深受广大开发写的喜好。Eclipse提供了一整套框架和服务,功能非常强大,编写和编译代码都非常方便,适合初学者学习和上手。新闻网站系统依赖Tomcat7和JDK1.6等环境,在eclipse中可以无缝的集成新闻网站所需的开发环境。同时eclipse还提供了安装插件的功能,比如文件管理器、版本控制器、jar包管理器等功能的插件集成。对开发人员是不可多得的好事。而且eclipse还支持开发人员自己编写自己属于自己想要实现的功能插件,这样也在促进eclipse自身功能的不断发展。eclipse还提供了丰富的开发快捷键,如Alt+/(代码提示)、Ctrl + /(注释或取消注释)、Ctrl + Shift + O(快速地导入类的路径)、Ctrl + Shift + D(在debug模式里显示变量值)等等,帮助开发人员快速的编写代码和定位开发中遇到的问题[7]。
随着Eclipse的不断发展,运用的越来越广泛,不仅支持面向对象的java编程语言开发,而且还支持COBOL、PHP、Android等编程语言的开发。这也是eclipse倍受欢迎的原因。eclipse在框架的设计上就是一种开放的思想,插件化的集成使得eclipse更加具有灵活性[13]。
2.3.5 JAVA开发语言
作为计算机编程语言的一种,JAVA开发语言经过多年的实践检验,深受系统开发人员的喜爱,在最近几年的网络编程工作中被广泛使用。因为JAVA是集中了计算机编程语言、系统开发、应用、部署环境于一体的综合性软件开发技术,且具备语言简单、健壮性、分布性、安全性、动态性、以及多线程等优点,从系统开发角度来看,可移植性好,在网络环境下对系统性能的提升具有较好的保障,方便程序员的整体开发工作[8]。
本文设计开发的电子邮件系统采用JAVA编程语言,可以在确保系统安全性的基础上,通过简单的编程,简化开发人员的工作流程。另外,通过继承机制,实现子类对父类的有效继承,从而提高代码的复用率,节约开发时间和开发成本[9]。

第3章系统设计

3.1系统模块的功能图
该系统基于SMTP协议和POP3协议来发送和接收邮件,所以该平台只是相当于一个代理邮件系统。该平台应该实现用户的登录验证,只有拥有对该邮箱有合法权限的用户才能进行登录,可以有多个用户同时对该邮箱(所代理的邮箱)进行控制[10]。而在发邮件系统中,需要用户输入要送发邮件的对方邮箱名称,可以进行邮件的发送。在收邮件系统中,邮箱将自动将所有邮件包括其基本信息显示在收件箱中。
为了更清晰直观的描述系统各功能,通过图3.1功能描述图将系统各功能展示出来。
此模块的功能图是从整个系统出发,描绘出来的。其中介绍了管理员各个功能和基本用户的功能等等。用模块的功能图描绘整个系统,使系统各个功能清晰可见,层次分明,是一种比较好的方法。

在这里插入图片描述

                             图3.1

3.2实体之间的关系E-R图
从剖析用户的方向来对基础数据进行构建的过程称为概念设计。它是一个过程,从分析到结果,从一个脑海中的想象到一个客观的实体的过程。之所以被广泛的应用,是因为它是自上而上、从简到繁的演进。最终形成一套完整的系统。数据库和实体的关联我们通常使用E-R模型设计方法。通过ER模型的实体、属性和连接来形容一个数据库实体的内容。ER模型可以方便开发者理解整个系统功能。
下图为E-R模型,建立的依据是由上面的需求分析所得。E-R模型如下图所示:
实体之间的关系E-R图如下图3.2所示。

在这里插入图片描述

图3.2 实体之间的关系E-R图
3.3数据库结构设计
MySQL数据库是瑞典公司发布的,具体的MySQL数据库使用的是结构化的一种语言来进行操作的,进行查询进行管理,并且由于MySQL数据库所使用的源代码的复杂度较低,因此代码跑起来的速度非常快,并且由于其开源,所以MySQL数据库开发的成本也是非常低的,可以说MySQL数据库,不管是企业还是各种国家机构都非常喜欢的软件系统。因此本文选用的是MySQL数据库,进行数据的存储。
电子邮件系统在MVC框架下进行实现,设计的系统网络拓扑图,如下图3.3所示。由图3.3能够得出,系统运行在服务器上,用户操作客户端通过网络经过交换机与服务器进行通信。系统运用java语言开发,在前端采用Ajax技术,在所有的windows操作系统中都可以使用。
在这里插入图片描述
图3.3 系统网络拓扑图
3.3.1系统信息配置表
系统配置信息表,如表3.4所示,该表保存系统的相关信息配置,相关信息如下图所示。对这些信息进行配置的目的就是为了更好的获取到用户的信息,以便对系统进行管理。
表3.4 config 系统配置表
编号 字段 含义 类型
1 ForumName 系统名称 varchar
2 ForumURL 系统URL通信 varchar
3 CompanyName 公司名称 varchar
4 HostUrl 主页URL通信 varchar
5 SMTPServer 服务器 varchar
6 SystemEmail E-mail varchar
7 TimeAdjust 适应时间 varchar
8 ScriptTimeOut 有效时间 varchar
9 Logo logo varchar
10 Picurl 图片通信 varchar
11 Faceurl 头像通信 varchar
12 EmailFlag 邮件标志 number
14 IpFlag IP标志 number
15 FromFlag 来源 number
16 Maxtitlelist 最大主题列表数 varchar
3.3.2用户表
用户表t_user,这个表有用户的最基本的信息,具体信息如下表所示
表3.5 用户表
编号 字段 含义 类型
1 UserID 唯一编号 number
2 UserName 用户名 varchar
3 UserEmail E-mail通信 varchar
4 Article 个人签名 number
5 UserPassword 密码 varchar
7 Sex 性别 varchar
8 homepage 个人主页 varchar
9 addDate 注册时间 datetime
10 logins 登录次数 numeric
11 width 图像宽度 number
12 height 图像高度 number
13 Oicq Oicq号 varchar
14 lastlogin 最后登录时间 datetime
3.3.3邮件信息记录表
邮箱信息记录表t_email,该表主要保存用户发送邮件的信息。如表3.6所示。
表3.6邮件信息记录表
编号 字段 含义 类型
1 id 唯一编号 number
2 serder 发件人 varchar
3 incept 接收人 varchar
4 title 标题 varchar
5 content 内容 varchar
6 flag 标识 number
7 sendtime 发送时间 varchar
8 delR 是否删除接受 number
9 delS 是否删除发送 number
10 isSend 发送标记 number

第4章 系统详细设计与实现

有系统设计可知本系统的设计共分为如下:
用户模块:用户可以对收发的邮件进行管理,它包括:
登录:登录;
撰写发送邮件:发送邮件;
收件箱管理:查询所有已接收邮件列表,邮件的查看。
草稿箱管理:查询所有草稿邮件列表,草稿箱的查看。
发件箱管理:查询所有已发邮件列表,查看已发送邮件,发送邮件的删除。
以上是对整体设计的概述,下面具体接受每个功能的具体设计介绍。
4.1系统流程说明
用户登陆时系统要求输入账号密码,然后对账号密码匹配,匹配失败,则需要用户重新登陆输入正确的账号密码。当匹配成功后,系统会进入收件箱获取收件箱邮件。用户可以查看收件箱列表中的邮件,或者点击写信,进行邮件发送。

在这里插入图片描述

图4 系统流程图
4.2 用户管理模块
该部分数据库方面只是涉及到一张Userinfo表。当用户进入登录页面后,要求输入账号,而且账号不能为空,为了防止无效的信息提交,系统会通过validator验证框架对表单进行非空验证。
根据表单中的action在struts-config.xml中找到的InfoAction对应的checkLogin方法,在该方法中将表单中的账号和密码用参数接收,再将参数传入数据处理层,通过jdbc连接数据库,用预编译对象执行SQL语句,再用它的SET方法传送参数,由于是一个查询语句有返回值,用ResultSet对象接收,进行读取,如果存在,也就是说存在用户名和密码都和用户输入信息相同,而且在同一行,则返回一个Boolean TRUE,否则没找到就返回一个FALSE。返回False则跳转至错误页面。如果返回true,用户登陆成功,程序在后台会获取收件列表,通过request返回一个邮件集合到前台展示。

在这里插入图片描述

图5 登入界面
主要代码:
html:form action=“/login.do” method=“post”.




该代码是在对login.jsp提交上来的Action和ActionForm的查找做部署。名字为"login",提交路径为path=“/login”,生存周期为会话,该控制器的物理路径为type=“com.action.LoginAction”,forward 标签为当控制器处理完后返回一个Actionorward的对象,该对象将在该标签内对应,查找到对应的name属性后,根据path跳转到对应的jsp.该action的name属性将找对应的ActionForm进行相应的表单填充。actionForm的配置代码如下





该ActionForm是一个动态的ActionForm,该类继承于
org.apache.struts.validator.DynaValidatorForm,在form-property标签里面指定他的属性和类型。
在对表单的非空验证的时候用了Validator验证框架,该框架的配置文件如下:



对应的配置文件的实现如下代码:

上面的代码是对表单的非空验证,是对应的要验证的表单名字,中property为指定要验证的表单控件名字,depends为验证方法,该方法在Validator验证框架中已经定义。可以查阅alidator-rules.xml配置文件。 为要输出信息的差数,该差数可以在资源文件中定义。 public ActionForward execute(ActionMapping mapping,ActionForm form, HttpServletRequest request,HttpServletResponse response){ DynaActionForm ac=(DynaActionForm)form; String ser=null;} if(((String)ac.get("server")).equals("1")){ ser=(String)ac.get("name")+"@163.com";} else if(((String)ac.get("server")).equals("2")){ ser=(String)ac.get("name")+"@sina.com";} else if(((String)ac.get("server")).equals("3")){ ser=(String)ac.get("name")+"@yahoo.com";} CheckU cu=new CheckU(); boolean t=cu.check((String)ac.get("name"),(String)ac.get("pass"),ser); HttpSession session=request.getSession(); session.setAttribute("server",ser); if(t==false){ ActionErrors errors = new ActionErrors(); errors.add(ActionErrors.GLOBAL_ERROR, newActionError("index.error")); this.saveErrors(request, errors); return mapping.findForward("return");} 如果数据库中该用户名字存在则返回一个TRUE,通过判断来选择是跳转到哪个页面。return mapping.findForward("return")就是返回一个在Struts-config.xml中存在的forward对象。 public boolean check(String name,String pass,String server) {String sql="select * from Userinfo where uname=(?) and pass=(?) and server=(?)";} 查询的游标字符串。 boolean T=false; try{Class.forName(ul);} 建立驱动。 catch(ClassNotFoundException e){e.printStackTrace();} try{ Connection con=DriverManager.getConnection(ur); 建立连接 try{PreparedStatement pt=con.prepareStatement(sql); 建立预编译对象。 try{ pt.setString(1,name); pt.setString(2,pass); pt.setString(3,server); 设置编译对象的差数。 ResultSet rs=pt.executeQuery(); 用结果集来存储返回记录。 while(rs.next()){T=true;}} 如果有该记录返回真。 finally{pt.close();}} finally{con.close();}} catch(SQLException q){q.printStackTrace();} return T; } 4.3 邮件发送模块 用户登陆后点击写信,进入写信页面,按照界面的提示输入相应的信息,点击发送,表单会将信息提交到InfoAction控制器的sendedMail方进行处理,调用sendEmail方法进行邮件发送。通过调用java.util包下的Properties,Properties对象是基于SMTP协议的类,将邮件信息封装到MimeMessage类中,来实现邮件在网络中的传输。邮件发送成功,页面会跳转至发送成功页面。

在这里插入图片描述

图6 邮件发送页面
主要代码:
public class sendText
{ public void send(String a,String b,String c,String e){
String path =e;
String sendmail=c ;
String tilte = a;
String content = b;
try
{Properties prop = new Properties();
prop.put(“mail.smtp.host”, “smtp.sohu.com”);
设置smtp主机
prop.put(“mail.smtp.auth”, “true”);
使用smtp身份验证
Session session = Session.getDefaultInstance(prop,
new Authenticator() {
protected javax.mail.PasswordAuthentication getPasswordAuthentication() {
return new javax.mail.PasswordAuthentication(“wen870105”,“wenshengyong”);
}
});
session.setDebug(true);
MimeMessage mess = new MimeMessage(session);
mess.addRecipient(Message.RecipientType.TO, new InternetAddress(
sendmail));
InternetAddress from = new InternetAddress(“wen870105@sohu@.com”);
// 发件人
mess.setFrom(from);
mess.setSubject(tilte);
mess.setSentDate(new Date());
Multipart multipart = new MimeMultipart();
MimeBodyPart messageBodyPart = new MimeBodyPart();
messageBodyPart.setText(content);
multipart.addBodyPart(messageBodyPart);// 装载正文
定义一个MimeBodyPart对象,用来装邮件的附件内容然后加入Multipart对象中.
MimeBodyPart fileBodyPart = new MimeBodyPart();
DataSource source = new FileDataSource(path);
fileBodyPart.setDataHandler(new DataHandler(source));
fileBodyPart.setFileName(source.getName());
multipart.addBodyPart(fileBodyPart); 装载附件
mess.setContent(multipart) 装载入Message中
mess.saveChanges(); 保存
Transport tra = session.getTransport(“smtp”); 建立发送的对象
tra.connect(“smtp.sohu.com”, “wen870105”, “wenshengyong”); 连接方法1
tra.sendMessage(mess, mess.getAllRecipients());
// tra.send(mess);//该方法发送不用建立连接
tra.close();}
catch (MessagingException ex)
{ex.printStackTrace();}}}
该项目的Struts-config.xml的配置。






<form-beanname=“Re” type=“org.apache.struts.action.DynaActionForm”>

4.4 邮件接收模块 点击收件箱,进入收件箱列表。在InfoAction控制器中调用selectGetsEmail方法,先从session中获取用户信息中的邮箱账户密码,通过pop3协议接收邮件。将接收到的邮件信息数组解析得到邮件的各个属性数据,对每个属性信息进行处理。将邮件信息保存到一个邮件对象的list,再通过jdbc连接数据库,将邮件信息保存,最后再将邮件list通过request传到jsp页面进行展示。 收件箱如图7所示。 ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/72f70be270af4a45aa88d64ff83a3b00.png)

图7 收件箱界面
主要代码:
String mailHost = “pop.sohu.com”;
String userName = “wen870105”;
String pwd = “wenshengyong”;
ArrayList arr=new ArrayList();范型,只能在1.5语法中
try
对读取所有邮件的方法的调用
{arr=Mail.receiveAllMail(mailHost, userName, pwd);}
保存邮件的信息,存储在request中
request.setAttribute(“arr”, arr);
返回一个ActionForward对象
return mapping.findForward(“recev”);}
查看所有邮件消息的具体实现方法
public static ArrayList receiveAllMail(String mailHost, String userName, String pwd)
throws MessagingException, IOException
{Properties p = new Properties();
Session session = Session.getDefaultInstance§;
Store store = session.getStore(“pop3”);
store.connect(mailHost, userName, pwd);
Folder folder = store.getFolder(“Inbox”);
folder.open(Folder.READ_ONLY);
Message message[] = folder.getMessages();
ArrayList arrMeg = new ArrayList();
// 接收邮件的具体信息
SimpleDateFormat time=new SimpleDateFormat(“MM月dd”);
for (int i = 0, length = message.length; i < length; i++)
{MessageBean megInfo = new MessageBean();
megInfo.setMailTime(time.format(message[i].getSentDate()));
megInfo.setMailFrom(MimeUtility.decodeText(message[i].getFrom()[0].toString()));
megInfo.setMailTopic(MimeUtility.decodeText(message[i].getSubject()));
megInfo.setMailSize(message[i].getSize() + “b”);
下面代码为在Action中调用查看其中一个邮件的内容的方法
String mailHost = “pop.sohu.com”;
String userName = “wen870105”;
String pwd = “wenshengyong”;
DynaActionForm ac=(DynaActionForm)form;
得到超连接传的参数来判断具体是哪个邮件
String p=(String)ac.get(“p”);
int id = Integer.parseInt§;
try
{try
{request.setAttribute(“bean”, Mail.receiveOneMail(mailHost, userName, pwd, id));调用方法并把邮件的内容存储在request中。
下面代码为实现具体的收邮件的方法。
public static MessageBean receiveOneMail(String mailHost, String userName, String pwd,int id) throws MessagingException, IOException
{Properties p = new Properties();
Session session = Session.getDefaultInstance§;
Store store = session.getStore(“pop3”);
store.connect(mailHost, userName, pwd);
Folder folder = store.getFolder(“Inbox”);
folder.open(Folder.READ_ONLY);
Message message[] = folder.getMessages();
MessageBean megInfo = new MessageBean();
megInfo.setMailContent(message[id].getContent().toString());
return megInfo;

第5章 系统测试与评价

5.1测试用例编写规则
针对不同的功能我们必须设计测试用例。以用户管理功能测试组测试项目设计为例,编写详细的测试用例,同时对测试用例的编写要求如下:
(1)功能覆盖: 需要测试的功能都要包含在测试用例中。
(2)输入覆盖:对同一功能进行测试,当出现不同条件的情况下,要对每一个条件进行单多测试。
(3)输出覆盖: 为了编写出符合要求的测试案例,针对输入条件不同的测试用例,在测试中,应对满足可能出现的正确结果进行覆盖。
5.2测试用例
测试相关的功能有:登录功能、邮件发送功能、收件功能、已发邮件删除功能的一系列功能模块。
对上面的功能进行测试,如果最后测试结果通过,则最后一栏的测试结果表示为P(pass)具体的测试案例见下面表5.1功能测试用例所示:
表5.1功能测试用例
测试组 划分类别 测试项目 测试结果
用户管理功能测试组 管理 登录 通过
用户管理功能测试组 功能测试 邮件撰写功能 通过
用户管理功能测试组 功能测试 邮件读取功能 通过
用户管理功能测试组 功能测试 邮件删除功能 通过
从上面表5.1功能测试用例可以看出来,对于注册功能、登录功能、邮件撰写功能、邮件读取功能、邮件删除功能的一系列功能模块的功能测试用例,全部测试通过,验证了系统平台的正确性。
通过测试用例的验证表明了设计的系统的正确性,也说明了数据库管理系统的强大功能,对于所需的各种用户的姓名、密码的一系列的信息按照相应的规则进行有顺序的排列,存储起来,这样可以方便以后的检索,调用等的强大功能。
5.3部分测试结果演示
这里对于上文所提到的各种功能的测试进行了部分演示,具体如下文所示:
5.3.1用户登录测试
当直接进入系统以后会看到的界面如图5-2所示,会提示我们输入具体的用户名:

在这里插入图片描述

图 5-2

登陆成功进入邮件列表页面
在这里插入图片描述

图 5-3
如上图5-2 用户登录界面,当直接进入系统以后会看到的界面;会提示我们输入具体的用户名,如果用户名输入错误,则会之间连接关闭,如果用户名正确,会进一步跳出界面提示我们输入用户名密码,然后会从数据库之中调取数据,将二者匹配,如果成功,则会登录成功,进入邮箱,如果不匹配,会关闭连接,重新进入才能重新输入。我们也可以看到如果我们没有相应的账户,在登录的下方有一个创建账户,也就是本文所设计的功能。

5.3.2邮件撰写功能测试
在这里插入图片描述

图 5-4
发送邮件到qq邮箱
在这里插入图片描述

图 5-5
qq邮箱接收成功
在这里插入图片描述

图 5-6
当我们进入邮箱界面之后,点击创建新邮件,就可以实现邮件的撰写功能了,具体情况如图5-4邮件的撰写功能测试所示:
如上图5-4邮件的撰写功能测试所示,我们可以进行文字的编写,邮件撰写完毕之后,我们可以选择相应的收件人进行发送,当然也可以选择放弃,并且可以注意到,邮件撰写完毕。
其他的测试用例我们这里就不一一展示了,但是从上面表5.1功能测试用例可以看出来,对于注册功能、登录功能、邮件撰写功能、邮件读取功能、邮件删除功能的一系列功能模块的功能测试用例,全部测试通过,验证了系统平台的正确性。

结 论

经过上面的介绍。本系统的功能已经测试完毕,测试结果正常,
这个系统在设计时,考虑到了后期的可扩展性问题,在该系统的基础上,后期可以对该系统进行拓展。另外,此邮件系统可以作为某一系统的某一部分,可以把此系统作为组件形式,稍作修改添加到所要开发的系统中。
在本次的毕业设计中,让本人学到很多知识,软件应用方面学习了服务器Tomcat,对以前有所接触的DreamWeaver也有了进一步的认识,对其的掌握也更熟练。在网络通信方面,深刻的认识了SMTP,pop3协议,也对JAVA,JAVA WEB有了一定的认识本系统在开发过程中的最大特色如下:
(1)本设计的思路非常清楚,在需求分析方面,充分考虑到了各种需求,以至于在后期设计方面可以顺利进行。
(2)在函数调用方面。充分考虑到了何种情况,在用类DBConnect.java,对数据库进行封装。
(3)本设计的操作流程,完全符合用户的操作习惯,规范化流程贯穿了整个设计过程。
(4)在对用户和管理员模块进行设计时,做了分开处理,看起来在物理上不存在联系行,但是在逻辑上又是紧密联系的。
由于时间关系,本设计在界面设计上没有进行细化,界面不是很美观,程序也可以进行适当的优化处理。今后会通过进一步的学习完善这些不足。通过本次毕业设计对开发项目积累了一定的经验,在今后的系统开发中一定会弥补界面的不足,以及对系统功能的优化方面加强。

参考文献

[1] Simon Robinson, K.Scott Allen等. C#高级编程[M]. 清华大学出版社. 2002. :175-177
[2] 罗军舟, 黎波涛, 杨明等. TCP/IP协议及网络编程技术[M]. 清华大学出版. 2004. :80-86
[3] 电脑编程技巧与维护杂志社. C#编程技巧典型案例解析[M]. 中国电力出版社. 2005. :100-103
[4] 云颠工作室. Visual C#中文版全面剖析[M]. 中国水利水电出版社. 2003.: 40-42
[5] Tim Parker . TCP/IP协议及网络编程技术[M]. 机械工业出版社. 2000.: 104-108
[6] 徐斐菲. 基于推送技术的移动电子邮件系统研究[D].西安电子科技大学, 2010.: 305-311
[7] 陶以政,吴志杰,唐定勇等. 基于Java消息服务的异步邮件发送技术[J]. 信息与电子工 程,2009,10(04):371-375.
[8] 牛尧,章文毅. 基于JavaMail的邮件管理系统的设计[J]. 科学技术与工程,2008,12(15):4188-4193.
[9] 周红静. 基于JaVaMail的Web邮件客户端的设计与实现[J]. 计算机系统应用,2008,14(06):88-91.
[10] 屈培,刘莉,葛蓁. 基于JavaMail的电子邮件群发[J]. 电脑知识与技术,2007,14(17):1285-1286.
[11] 钟忺,刘春燕. 基于JavaMail API的邮件认证与接收[J]. 计算机与数字工程,2007,18(06):88-100.
[12] 杨淑萍,聂哲. 基于JavaMail的邮件客户端程序的设计与实现[J]. 电脑知识与技 术,2006,12(04):29-33.
[13] 范莉莉. 基于Linux的Web邮件系统的设计[D].华中师范大学,2003. :103-106

致 谢

时间如白驹过隙,几年大学时光也匆匆进入尾声,在论文完成之际,向指导老师致以崇高的敬意与由衷的感谢,回顾从选择课题到系统制作到最后的系统调试与论文改写,在这些过程中碰到了种种困难,老师以他渊博的学识,认真负责的教学态度,精益求精的教学理念,细心的纠错以及对我耐心的指导,正是有老师如此的帮助我才能顺利的完成论文。同时也感谢与我一起度过欢快时光的同学们与老师们,正是有你们我在大学才能快的生活以及获得丰富的专业知识,与此同时再一次感谢指导老师,感谢他为我们营造了浓厚的学习氛围,无私的给予我们帮助,同时不倦的指导我们。最后再次感谢在百忙之中抽空前来参与以及指导我们的老师,领导,教授。

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

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

相关文章

【数值计算方法(黄明游)】矩阵特征值与特征向量的计算(三):Jacobi 旋转法【理论到程序】

文章目录 一、Jacobi 旋转法1. 基本思想2. 计算过程演示 二、Python实现迭代过程&#xff08;调试&#xff09; 矩阵的特征值&#xff08;eigenvalue&#xff09;和特征向量&#xff08;eigenvector&#xff09;在很多应用中都具有重要的数学和物理意义。Jacobi 旋转法是一种用…

06、基于内容的过滤算法Tensorflow实现

06、基于内容的过滤算法Tensorflow实现 开始学习机器学习啦&#xff0c;已经把吴恩达的课全部刷完了&#xff0c;现在开始熟悉一下复现代码。对这个手写数字实部比较感兴趣&#xff0c;作为入门的素材非常合适。 05、基于梯度下降的协同过滤算法中已经介绍了协同过滤算法的基…

用最少数量的箭引爆气球[中等]

优质博文&#xff1a;IT-BLOG-CN 一、题目 有一些球形气球贴在一堵用XY平面表示的墙面上。墙面上的气球记录在整数数组points&#xff0c;其中points[i] [xstart, xend]表示水平直径在xstart和xend之间的气球。你不知道气球的确切y坐标。一支弓箭可以沿着x轴从不同点完全垂直…

Springboot-注册注解【springboot常用注解】

1.组件注册 1.1 使用的注解 Configuration:普通配置类,替代以前的配置文件,配置类本身也是容器的组件|SpringBootConfiguration:Springboot配置类,与Configuration功能一样|Bean:替代以前的Bean标签,如果没有在Bean标签内定义名字,则默认组件的名字为方法名,可以直接修改注解…

在gitlab上使用server_hooks

文章目录 1. 前置条件2. Git Hook2.1 Git Hook 分为两部分&#xff1a;本地和远程2.1.1 本地 Git Hook&#xff0c;由提交和合并等操作触发&#xff1a;2.1.2 远程 Git Hook&#xff0c;运行在网络操作上&#xff0c;例如接收推送的提交&#xff1a; 3. 操作步骤3.1 对所有的仓…

Linux下的文件IO之系统IO

1. 知识点 读入写出&#xff0c;切记以我们程序为中心向文件或者别的什么东西读入写出&#xff08;输入流输出流&#xff09; 人话就是 文件向我们程序就是读入 程序向文件或者别的什么就是写出 2. open打开文件 open.c /****************************************************…

C++ 学习之函数成员指针的一个小细节

看看下面的代码&#xff0c;你能看出错误吗 class A { public:void fun(){}}; int main() {A a;void (A:: * p)() &A::fun;(*p)(); } 这段代码在调用成员函数时存在问题。正确的方式是使用对象来调用成员函数&#xff0c;而不是通过指针。以下是修正后的代码&#xff1a…

STM32CubeIDE(CUBE-MX hal库)----定时器

系列文章目录 STM32CubeIDE(CUBE-MX hal库)----初尝点亮小灯 STM32CubeIDE(CUBE-MX hal库)----按键控制 STM32CubeIDE(CUBE-MX hal库)----串口通信 文章目录 系列文章目录前言一、定时器二、使用步骤三、HAL库实验代码三、标准库代码 前言 STM32定时器是一种多功能外设&#…

异常 Exception 02

异常 Exception 02 六、异常处理1、基本介绍2、异常处理的方式3、示意图 try-catchthrows1、介绍2、注意事项 自定义异常1、基本概念2、自定义异常的步骤3、实例4、throw和throws的区别 六、异常处理 1、基本介绍 异常处理就是当异常发生时,对异常处理的方式。 2、异常处理的…

以STM32CubeMX创建DSP库工程方法一

以STM32CubeMX创建DSP库工程方法 略过时钟树的分配和UART的创建等&#xff0c;直接进入主题生成工程文件 它们中的文件功能如下&#xff1a; 1&#xff09;BasicMathFunctions 基本数学函数&#xff1a;提供浮点数的各种基本运算函数&#xff0c;如向量加减乘除等运算。 2&…

VBA代码解决方案第8讲:用FindPrevious进行重复搜索及利用LIKE查找

《VBA代码解决方案》(版权10028096)这套教程是我最早推出的教程&#xff0c;目前已经是第三版修订了。这套教程定位于入门后的提高&#xff0c;在学习这套教程过程中&#xff0c;侧重点是要理解及掌握我的“积木编程”思想。要灵活运用教程中的实例像搭积木一样把自己喜欢的代码…

货代FOB条款卖方必备的知识:发货人都要承担哪些费用呢?

据统计&#xff0c;中国出口中以FOB成交的占到70%&#xff0c;但专家指出&#xff1a;FOB对出口商的风险更大&#xff0c;有可能造成货、款两空的结局。 目前我国出口合同以FOB价格条款成交的比例越来越大&#xff0c;而且收货人指定船公司的少&#xff0c;指定境外货代的多&am…

3款厉害的小工具,小黑子都在用!

大家好&#xff0c;我是 Javapub。 程序员与普通人最大的区别是什么&#xff0c;当然是会使用工具。基于一些同学经常问我的问题&#xff0c;接下来给大家分享几款我经常使用的工具&#xff0c;主打一个提升效率。 第一款 Everything 用 windwos 的同学都体会过&#xff0c;…

带大家做一个,易上手的家常土豆片

还是先从冰箱里那一块猪瘦肉 搞一点蒜和生姜 切成小块 装进一个碗里 这里一点就够了 一条绿皮辣椒 切片 三个左右干辣椒 随便切两刀 让它小一点就好了 一起装一个碗 一大一小两个土豆切片 猪肉切片 起锅烧油 然后 下肉翻炒 等肉变颜色捞出来 然后放入土豆 和小半碗水 让…

JeecgBoot低代码开发—Vue3版前端入门教程

JeecgBoot低代码开发—Vue3版前端入门教程 后端接口配置VUE3 必备知识1.vue3新特性a. https://v3.cn.vuejs.org/b.setup的用法c.ref 和 reactive 的用法d.新版 v-model 的用法e.script setup的用法 2.TypeScript基础 后端接口配置 如何修改后台项目路径 http://127.168.3.52:8…

【玩转 EdgeOne】| 腾讯云下一代边缘加速CDN EdgeOne 是安全加速界的未来吗?

目录 前言边缘加速与安全加固边缘计算与CDN的融合EdgeOne优秀的安全特性EdgeOne卓越的性能表现灵活的配置和管理生态系统的支持与发展技术创新与未来展望EdgeOne试用结束语 前言 在当下互联网的迅猛发展的时刻&#xff0c;云计算和边缘计算技术的快速发展为网络加速领域带来了…

awk从放弃到入门(10):awk内置函数

awk从放弃到入门&#xff08;10&#xff09;&#xff1a;awk内置函数 算数函数字符串函数其他函数 本博文转载自 这篇文章中的知识点是建立在前文的基础上的&#xff0c;如果你还没有掌握前文中的知识&#xff0c;请先参考之前的文章。 注&#xff1a;在阅读这篇文章之前&…

Abbyy FineReader16最新版本有哪些新功能?

在数字化时代&#xff0c;数据处理和转换变得非常重要&#xff0c;Abbyy FineReader 就是一款专门用于处理、转换和识别图像和 PDF 文件的软件。在本文中&#xff0c;我们将会详细介绍 Abbyy FineReader 的功能以及适合使用该软件的电脑。 ABBYY Finereader 16-安装包下载如下&…

滴滴2023.11.27P0级故障技术复盘回顾(k8s的的错?)

本文从滴滴官方恢复及技术公众号带大家从技术角度复盘这次事故 目录 1. 背景 2. 滴滴官方消息 3. 问题分析及定位 4.网传的k8s及解析 5.k8s引发的思考&#xff1a;举一反三&#xff0c;怎么避免再次出现 6.近段时间其他平台崩溃回顾 1. 背景 11 月 27 晚约 10 点&#xf…

TFIDF、BM25、编辑距离、倒排索引

TFIDF TF刻画了词语t对某篇文档的重要性&#xff0c;IDF刻画了词语t对整个文档集的重要性