1、基于 Javamail 的邮件收发系统 毕业设计(论文) ( 20 届) 论文(设计)题目 基于 Javamail 的邮件收发系统 作 者 二级学院、专业 班 级 指导教师(职称) 论 文 字 数 论 文 完 成 时 间 20 年月 日 基于 Javamail 的邮件收发系统 基于 JavaMail 的 邮件 收发 系统 摘 要 电子邮件在当今社会中扮演了一个很重要的角色。越来越多的人在使用它。而且用它的人数势必会继续增加。本文介绍了 Javamail 邮件收发系统的开发背景,对国内外现有的 多种成熟的 电子邮件系统进行分析和比较, 总结 出它们的优缺点, 对 Javamail 技术进行深入研
2、究,提出并设计实现了基于 Javamail 的邮件收发系统。本系统利用 SMTP 协议和 POP 协议从底层进行开发,利用 JavaMail API 为收发邮件提供与协议无关的访问。 SMTP( 简单邮件传输协议 )是 专门用来发送邮件的。 POP( 邮局协议 ) 是专门用于接收邮件的。 JavaMail API 是一种可选的、能用于读取、编写和发送电子消息的 标准扩展 包 。 本文主要可分为四个部分。第一部分 介绍 了 Javamail 邮件系统的意义 和现状。第二部分具体介绍了几种 相关协议和 Javamail API。第三部分 主要 介绍了系统的开发工具 JAVA 语言、 Eclipse
3、 及其安装过 程与配置方法 。第四部分详细 阐述 了 Javamail 邮件收发系统的实现过程。 关键词 : SMTP, POP, JAVAMAIL, 邮件收发 基于 Javamail 的邮件收发系统 MAIL SYSTEM BASED ON JAVAMAIL ABSTRACT E-Mail play a very important role in modern times. More and more people are using it, and the number of it will larger and larger. This paper introduced the jav
4、amail systems development background, analyzed and compared some existing maturity Email system at home and abroad , summarized their advantages and disadvantages, studied deeply with the javamail technology , proposed and designed out the mail system based on javamail. This system used POP protocol
5、 and SMTP protocol to develop from the bottom, used JavaMail API to provide the visit which has nothing to do with the agreement for send and receive email. SMTP (Simple Mail Transfer Protocol) is designed to send a message. POP (Post Office Protocol) is designed to receive mail. JavaMail API is an
6、standard expansion package which is optional, can be used to read, write and send electronic messages. This paper can be divided into four parts. The first part introduced javamail email systems significance and status. The second part introduced several related agreements and JavaMail API. The thir
7、d part mainly introduced systems development tools JAVA language , Eclipse and their installation process and configuration method. The fourth part detailed javamail email systems realization process. Keywords: SMTP, POP, JAVAMAIL, Email to send and receive 基于 Javamail 的邮件收发系统 目 录 第一章 绪 论 . 1 1.1 电子
8、邮件介绍 . 1 1.2 研究意义 . 1 1.3 研究现状 . 3 第二章 相关邮件协议和 JavaMail API. 5 2.1 相关邮件协议 . 5 2.2 JavaMail API . 6 2.2.1 JavaMail API 简介 . 6 2.2.2 JavaMail API 核心类 . 6 2.3.3 JavaMail API 的应用 . 8 第三章 应用系统开发工具 . 10 3.1 Java 开发语言简介 .11 3.2 开发工具 Eclipse . 12 3.3 开发软件的安装 . 12 3.3.1 JAVA 环境的安装与配置 . 12 3.3.2 Eclipse 的安装 .
9、 14 3.3.3 javamail 的安装 . 15 第四章 JavaMail 系统的实现 . 16 4.1 环境配置与界面搭建 . 16 4.2 设置邮件服务器参数的实现 . 16 4.3 创建与发送邮件功能的实现 . 17 4.3.1 装载邮件服务器属性 , 并与其建立连接 . 17 4.3.2 构建邮件 . 18 4.3.3 创建 Transport 对象发送邮件 . 19 4.4 接收邮件功能的实现 . 19 4.4.1 获取服务器信息 . 20 4.4.2 建立通信连接 . 20 4.4.3 显示邮件 . 20 4.5 删除邮件功能的实现 . 22 第五章 结语 . 23 参考文献
10、 . 24 致 谢 . 25基于 Javamail 的邮件收发系统 第 1 页 共 25 页 第一章 绪 论 本文是一项基于 JavaMail 的邮件系统的综合性研究,使用 Sun 公司提供的 JavaMail API 实现电子邮件的发送、电子邮件的接收等等功能。 1.1 电子邮件介绍 电子邮件 (简称 E-mai1)又称电子信箱、电子邮政,它是 种用电子手段提供信息交换的通信方式。它是全球多种网络上使用最普遍的一项服务。这种非交互式的通信 ,加速了信息的交流及数据传送 ,它是 个简易、快速的方法。通过连接全世界的 Internet,实现各类信号的传送、接收、存贮 等处理 ,将邮件送到世界的各
11、个角落。到目前为止 ,可以说电子邮件是 Internet 资源使用最多的一种服务,E-mai1 不只局限于信件的传递 ,还可用来传递文件、声音及图形、图像等不同类型的信息。 电子邮件不是一种“终端到终端”的服务 ,是被称为“存贮转发式”服务。这正是电子信箱系统的核心,利用存贮转发可进行非实时通信,属异步通信方式 1。即信件发送者可随时随地发送邮件,不要求接收者同时在场,即使对方现在不在,仍可将邮件立刻送到对方的信箱内 ,且存储在对方的电子邮箱中。接收者可在他认为方便的时候读取信件 ,不受时空限制 。在这里 ,“发送”邮件意味着将邮件放到收件人的信箱中 ,而“接收”邮件则意味着从自己的信箱中读取
12、信件 ,信箱实际上是由文件管理系统支持的 个实体。因为电子邮件是通过邮件服务器 (mai1 server)来传递档的。通常 mail server 是执行多任务操作系统 UNIX 的计算机,它提供 24 小时的电子邮件服务 ,用户只要向 mail server 管理人员申请 个信箱账号 ,就可使用这项快速的邮件服务。 电子邮件的工作原理: 1) 电子邮件系统是一种新型的信息系统 ,是通信技术和计算机技术结合的产物。 电子邮件的传输是通过 电子邮件简单传输协议 (Simple Mail Transfer Protocol,简称 SMTP)这一系统软件来完成的 ,它是 Internet 下的一种电
13、子邮件通信协议。 2) 电子邮件的基本原理 ,是在通信网上设立“电子信箱系统”,它实际上是一个计算机系统。系统的硬件是一个高性能、大容量的计算机。硬盘作为信箱的存储介质 ,在硬盘上为用户分一定的存储空间作为用户的“信箱”,每位用户都有属于自己的 个电子信箱。并确定 个用户名和用户可以自己随意修改的口令。存储空间包含存放所收信件、编辑信件以及信件存盘三部分空间 ,用户 使用口令开启自己的信箱 ,并进行发信、读信、编辑、转发、存档等各种操作 , 系统功能主要由软件实现。 3) 电子邮件的通信是在信箱之间进行的。用户首先开启自己的信箱,然后通过键入命令的方式将需要发送的邮件发到对方的信箱中。邮件在信
14、箱之间进行传递和交换 ,也可以与另 个邮件系统进行传递和交换。收方在取信时,使用特定账号从信箱提取。 1.2 研究意义 随着社会的发展,科技的进步,作为信息载体的计算机日益显露出其举足轻重的地位。当今社 基于 Javamail 的邮件收发系统 第 2 页 共 25 页 会已步入了信息社会,知识经济将成为新世纪的主导产业 。人们传统的联系方式也在不断的被改 变。伴随着 Internet 的发展,电子邮件以其使用简易、投递迅速、收费低廉,易于保存、全球畅通无阻等等优点被广泛地应用,它使人们的交流方式得到了极大的改变。电子邮件已是人们沟通、交流的重要工具。 由于 E-mail 是当今人们交流的重要工
15、具之一,因而,对 E-mail 系统的研究也逐渐变的热起来。基于 JavaMail 邮件系统具有快捷、方便的优点,吸引了众多的网络用户,使其成为 E-mail 研究方向的热点之一。 最初人们在使用 E-mail 服务时,必须使用邮件客服端,如 :Outlook、 Foxmail 等软件,去接收邮件服 务器上的邮件。由于操作系统的不同,往往需要不同的邮件接收客户端,给人们接收邮件带来很大的不便。但是基于 JavaMail的邮件系统只要一个网络浏览器就可以实现 E-mail的日常收发功能,而网络浏览器是任何操作系统中都自带的软件,用户在世界任何一个角落任何一台计算机都可以进行 E-mail 的收发
16、工作。 此外,由于最初用户接收邮件的设置信息均保存在客服端,当用户重新安装操作系统或者更换计算机还要重新设置,而基于 JavaMail 的邮件收发系统的设置保存在邮件服务器上,不论你更换电脑还是系统,收发邮件的方式都是按照以前 的设置进行的,使邮件的收发更合你的口味。 基于 JavaMail 的邮件系统让你不在为机器配置担忧,而且还为用户的邮件安全分担忧愁。 由于最初需要使用客服端软件收发软件,硬件配置低的计算机就显得“爱莫能助”了。虽然计算机的发展使得硬件问题不再是个问题,但是不强调硬件的配置也是基于 JavaMail 邮件系统的一个优点之一。此外,由于客户端软件维护和升级困难,网络浏览器的
17、更新速度要远远大于邮件客户端软件的更新速度,这就给用户一个更安全的环境。 日前,基于 JavaMail 邮件系统的发展越来越成熟。多线程的设计方法,大大 的提高了系统的通信效率和成本;采用 MVC 设计模式的邮件系统还大大的减少了系统的维护量。 当然,基于 JavaMail 的邮件系统缺乏对动态页面的支持能力,没有集成有效地数据库处理功能,也存在系统扩展性差、数据处理速度稍慢等缺点。但是,这些问题已经有了很好的起步,将不再是大的问题。 电子邮件系统经过几十年的发展,已经形成了完善的技术体系。邮件服务器系统在保留了电子邮件系统最初的收发邮件、邮件存储等基本功能的同时,融入了最新的计算机与网络技术
18、,使电子邮件系统有了全新的改观 。邮件技术的发展趋势如下: (1) Web 邮件技术 随着中国 Internet 应用的日益普及和逐步深入,这些数字仍在不断增长。但是对于电子邮件系统来说,单纯使用邮件客户端程序进行邮件的收发已经不能满足用户移动办公的需要。 Web 邮件技术的出现,彻底解决了用户办公的需要,使得邮件用户可以在任何地方使用浏览器登录邮件服务器收发邮件,而不用配置邮件客户端程序。 (2) 多域邮件服务 所谓多域邮件服务,即是一台物理服务器为多个独立注册 Internet 域名的企业或单位提供电子邮基于 Javamail 的邮件收发系统 第 3 页 共 25 页 件的服务,在逻辑上,
19、这些企业和单位拥有自己独立的邮件服务器,也可以称为虚拟邮件服务 器技术。对于 ISP 提供商和企业集团公司来说,多域邮件服务器的支持能力是选择邮件服务器的一个重要考虑因素。它可以方便地扩展其横向邮件服务能力。 (3) Linux 邮件服务器 Linux 操作系统作为目前应用最为广泛的开源操作系统,具有性能稳定、可靠性高和价格低廉的特点。使用 Linux 作为邮件服务器,主要是可以与 Sendmail、 MySQL 等开源软件共同使用,在满足用户需求的基础上降低了系统价格 。 (4) 安全防护 现在的邮件服务器在安全防护技术上有了较大的提高,包括数据身份认证、传输加密、垃圾邮件过滤、邮 件病毒过
20、滤、安全审计等的多项安全技术在邮件服务器中都得到了很好的应用。 (5) 多语言 目前光中文就有若干字符集,如 GB-18030、 GB-2312、 Big5 等等,虽然我们可以统一标准,但是,在实际的过程中,我们不可能统一所有的邮件客户端,因此我们只能要求邮件服务器支持多语言的环境,使 “ 我们的沟通无障碍 ” 。 (6) 远程监控和性能调整 由于目前许多邮件服务器处于电信托管等方式,不可能经常进行本地操作,因此目前邮件服务器均提供了远程邮件监控的功能。我们可以通过 Web 方式,监控邮件服务器的工作状态,包括在线用户 数、邮件处理数量和速度、存储空间使用率等,并且可以随时对出现的发信高峰和网
21、络攻击进行远程处理 2。 总之,计算机的广泛应用, Internet 的不断发展, E-mail 在日常通讯中的地位越来越重要。虽然传统的 C/S 模式的邮件系统仍占有重要地位,但基于 JavaMail 的邮件收发系统会以其快捷、方便的等等优点为越来越多的人所接收,广泛的应用到各个领域,成为一名后起之秀。 1.3 研究现状 E-mail 是信息化时代最重要的联系工具之一,在日常的工作学习中具有非常重要作用。对 E-mail的研究也层出不穷,基于 JavaMail 邮件系统的设计与实现大多数都是研究和使用 Sun 公司提供的JavaMail API 去实现其邮件发送和接收功能。 电子邮件的研究也
22、存在着 以 下的问题: (1) Unix 式的平台 在 Unix 平台下以 Sendmail的资格最老,但是由于 Unix 系统是开发源代码的,所以导致 Sendmail有不少代码缺陷和漏洞,如有些代码缺陷可以让攻击者远程地利用红帽子或 SlackwareLinux 软件的计算机, APP 漏洞,即用 sendmail 系统的 APP 漏洞能够取得 root 权限。 (2) Winodws 式的平台 在 windows 领域种类繁 多的邮件服务器中,微软的 Exchange 排在首位,但是它存在着以下问题: a 该系统只能运行在 Windows NT 上,而 WinNT 本身的不可靠、不稳定决
23、定了 Exchange Server的不稳定、不可靠。 基于 Javamail 的邮件收发系统 第 4 页 共 25 页 b Exchange Server 具有严重的内存泄漏问题,随着系统运行时间的增加会越来越慢,平均至少要一周重启一次。 c Windows NT 系统面临着巨大的病毒感染隐患,一旦 Exchange Server 感染病毒,会造成Exchange Server 本身的瘫痪,感染速度惊人。杀毒软件只会“亡羊补牢”。 d Exchange Server 对邮件账户的支持是非常有限的,一般超过 200 个用户是系统就会效率低下,提升性能只能依靠昂贵的硬件。 e Exchange
24、Server 自身安全防范较弱,容易被外界利用来转发邮件,甚至冒充内部人员发送垃圾邮件。 f Exchange Server 维护困难,拥有成本高,每个用户需交纳 10 美元许可费。 除了 Exchange 外, Lotus Notes 基本上还是一套 OA 和工作流系统,其邮件功能十分有限。国内用户反映的问题 3主要有: a 邮件系统经常不能正常收发,需频繁的重启动服务器或清理邮件系统。 b 经常被外 界利用来转发邮件。 c 不能和部分邮件系统很好兼容,系统收到的 263 和 163 信箱的邮件显示为乱码,收不到hotmail 的邮件。 d OA 功能丰富,但是邮件系统不够可靠,效率低,超过
25、 300 人时,收信速度明显变慢。 e 拥有成本高,每个用户的成本是 21 美元,比 Exchange Server 还贵。 邮件系统市场是个刚刚形成的市场,格局还有很大的变数。同时企业用户对邮件系统产品的各项性能不太熟悉,在对邮件系统的好坏没有很清晰的评判标准时,往往很注重系统提供商的成功案例,也就是系统提供商的业界背景。企业购买邮件系统主要是为了提高 办公效率,所以力图控制成 本。用户需要更标准的产品以减小整体拥有成本。产品整体化可为企业维护降低成本,但需要更容易定制化来满足用户个性化需求。另外,不同的 ISP4需要个性化的标志以区别同类产品,价格和产品性能同为企业用户购买时的重要参照。
26、电子邮件系统应该具备无限的扩展能力, Internet 网络的一个特性是变化无常,我们需要应对随 时而来的应用尖峰。因此,我们需要电子邮件系统具有无限的可扩展能力,这个能力主要体现在邮件的处理能力和邮件的存储能力上。为了能够使邮件的处理能力可以无限扩展,就需要引入集群和负 载均衡技术,使应用平台可以在需要的时候无限扩充,满足长期或临时的业务需要。为了便于邮件存储,需要高性能的邮件存储解决方案,最为理想的应该是 SAN 技术在邮件服务器领域的应用。 总之,电子邮件是 一项系统工程,需要网络、数据存储、数据库、操作系统等技术的支持 。 因此电子邮件系统的每一次技术革新都是在其他技术发展的基础之上的
27、。 基于 Javamail 的邮件收发系统 第 5 页 共 25 页 第二章 相关邮件协议和 JavaMail API 2.1 相关邮件协议 邮件的传送要依赖于具体的传输协议,主要有: SMTP、 POP3、 MIME。 ( 1) SMTP:简单邮件传输协议 , 它是一组用于由源地址到目的地传送邮件的规则,或者说是由它来控制信件传输的一种中转方式。 SMTP 协议属于 TCP/IP 协议族,它帮助每台计算机在发送或中转邮件时找到下一个目的地。通过 SMTP 协议所指定的服务器,我们就可以把 Email 寄到收信人的服务器上了,整个过程只需要几分钟。 SMTP 的开发最初是为了在封闭的网络中传送
28、相对来说不太重要的简短信件,而不是为了在互联网中传送重要而敏感的信息,因此最初通过 SMTP 传输信件时 ,安全性不高。 ( 2) POP:邮局协议 5,当前的版本为 3,也称作 POP3。 POP 是 一种允 许用户从邮件服务器收发邮件的协议,它有两种版本,即 POP2 和 POP3,都具有简单的电子邮件存储转发功能。 POP2 和POP3 本质上类似,都属于离线式工作协议,但是由于使用了不通的协议端口,两者并不兼容。与SMTP 协议相结合, POP3 是目前最常用的电子邮件服务协议。在离线工作方式下,用户收发邮件时,首先通过 POP3 客户程序登录到支持 POP3 协议的邮件服务器,然后发
29、送邮件及附件;接着,邮件服务器为该用户收存的邮件传送给 POP3 客户程序, 并将这些邮件从服务器上删除;最后,邮件服务器将用户提交的发送邮件,转发到运行 SMTP 协议的计算机中,通过它实现邮件的最终发送。在为用户从邮件服务器收取邮件时, POP3 是以该用户当前存储在服务器上全部邮件为对象进行操作的,并一次性将它们下载到用户端计算机中。一旦客户的邮件下载完毕,邮件服务器对这些邮件的暂存托管即告完毕。使用 POP3,用户不能对他们贮存在邮件服务器上的邮件进行部分传输,离线工作方式 适合 那些从固定计算机上收发邮件的用户使用。 ( 3) MIME: 多用途网际邮件扩充协议 , 是最初的互联网电
30、子邮件协议的一个扩展,说明了如何安排消息格式使消息在不同的邮件系统内进行交换。 MIME 的格式灵活,使人们能使用这一协议在互联网上交换不同类型的数据文件:音频,视频,图像,应用软件和其他类型的文件,也包括在最初的协议 简单邮件传送协议 (SMTP)中的 ASCII 文本。 ( 4) IMAP: IMAP 使用在接收信息的高级协议,目前版本为第 4 版,所以也被称为 IMAP4。需要注意的是在使用 IMAP 时,邮件服务器必须支持该协议。从这个方面讲,我们并不能完全使用IMAP 来替代 POP,不能期待 IMAP 在任何地方都被支持。假如邮件服务器支持 IMAP,那么我们的邮件程序将能够具有以
31、下被 IMAP 所支持的特性 6:每个 用户在服务器上可具有多个目录,这些目录能在多个用户之间共享。其与 POP 相比高级之处显而易见,但是在尝试采取 IMAP 时,我们认识到它并不是十分完美的 。 由于 IMAP 需要从其它服务器上接收新信息,将这些信息递送给用户,维护每个用户的多个目录,这都为邮件服务器带来了高负载。并且 IMAP 与 POP 的一个不同之处是 POP用户在接收邮件时将从邮件服务器上下载邮件,而 IMAP 允许用户直接访问邮件目录,所以在邮件服务器进行备份作业时,由于每个长期使用此邮件系统的用户所用的邮件目录会占有很大的空间,这将直接导致邮件服务器上磁盘空 间暴涨。 基于
32、Javamail 的邮件收发系统 第 6 页 共 25 页 ( 5) NNTP 和其它的第三方协议 : 正因为 JavaMail API 在设计时考虑到与第三方协议实现提供商之间的分离,故我们可以很容易的添加一些第三方协议。 SUN 维护着一个第三方协议实现提供商的列表: http:/ 被 SUN 提供支持的第三方协议:比如 NNTP 这个新闻组协议和 S/MIME 这个安全的 MIME 协议。 2.2 JavaMail API 2.2.1 JavaMail API 简介 JavaMail API 是 SUN 为 Java 开发者提供对电子邮件处理的延伸,能用于读取、编写和发送电子消息的包(标
33、准扩展)。为管理电子邮件提供了统一的应用编程接口,它可以处理各种 e-mail 格式(包括 IMAP、 POP、 SMTP 以及 MIME)和其他 Internet 相关的讯息通信协定。 用户可使用这种包创建邮件用户代理( Mail User Agent, MUA)类型的程序,它类似于 Foxmail、Eudora 以及 Miceosoft Outlook 这些邮件程序。其主要目的不是像发送邮件或其他邮件传输代理( Mail Transfer Agent, MTA)类型的程序那样用于传输、发送和转发消息 7。换句话说,用户可以与 MUA类型的程序交互,以阅读和撰写电子邮件。 MUA 依靠 MT
34、A 处理实际的发送任务。 2.2.2 JavaMail API 核心类 ( 1) Session: Session 类定义了基本的邮件会话。就像 Http 会话那样,我们进行收发邮件的工作都是基于 这个会话的。 Session 对象利用了 java.util.Properties 对象获得了邮件服务器、用户名、密码信息和整个应用程序都要使用到的共享信息。 Session 类的构造方法是私有的,所以我们可以使用 Session 类提供的 getDefaultInstance()这个静态工厂方法获得一个默认的 Session 对象: 或者使用 getInstance()这个静态工厂方法 8获得自定
35、义的 Session: 从上面的两个例子中不难发现, getDefaultInstance()和 getInstance()方法的第二个参数都是 null,这是因为在上面的例子中并没有使用到邮件授权 。 在对 mail server 进行访问的过程中使用共享的 Session是足够的,即使是工作在多个用户邮箱的模式下也不例外。 ( 2) Message : 一旦获得 Session 对象, 就可以继续创建要发送的信息, 在这里 SUN 提供了Message 类型来帮助开发者完成这项工作。由于 Message 是一个抽象类,大多数情况下,我们使用javax.mail.internet.MimeM
36、essage 这个子类,该类是使用 MIME 类型 和 头的 电子邮件 信息。 信息头只能使用 US-ASCII 字符,而非 ASCII 字符将通过编码转换为 ASCII 的方式使用。为了建立一个 MimeMessage 对象,我们必须将 Session 对象作为 MimeMessage 构造方法的参数传入: Properties props = new Properties(); / fill props with any information Session session = Session.getDefaultInstance(props, null); Properties props = new Properties(); / fill props with any information Session session = Session.getInstance(props, null);