四川大学工程硕士学位论文 中小企业web邮件系统的设计与实现
写电子邮件,MUA根据邮件传输代理(Mail Transfer Agent,MTA)处理发送任务。
Java Mail只是定义了一组接口,它是作为Java的可选包存在的(不管是POP3、SMTP、IMAP还是Hotmail用的HTTP协议),从使用者的角度看,Java Mail API包括三个部分。
(1) Message及相关的接口/类。这些类是用来构建一个标准的RFC822邮件。 (2)Transport及相关的接口/类。这些类是用来发送一个已经构建好的RFC822邮件。
(3)Store及相关的接口/类。这些类是用来接收邮件,并按RFC822标准,转换成message对象。
从服务提供者角度看,Java Mail API还包括一套可扩展的provider机制,通过它,你可以扩展出各种邮件协议,例如:SMTP、SMTPs、POP3、POP3s、IMAP、NNTP等。不过,对使用API的人来说,这些provider是透明的。
2.2相关协议
邮件系统主要有三个关键的协议:SMTP协议,POP3协议和IMAP4 协议1.SMTP协议
SMTP(Simple Mail Transfer Protocol)协议的目标是向用户提供安全、高速的邮件传输。SMTP协议具有中转特性,接收者与发送者的SMTP之间建立一个双向传送通道,发送方SMTP发出SMTP命令,接收方SMTP接收SMTP命令,而应答SMTP命令就作反方向传送。这就是设计SNTP所依据通信模式。
当传送通道被建立后, SMTP发送者以MAIL指令告示邮件发送者,SMTP接收者如果能够接收邮件就返回OK应答。接着,SMTP发送者再发出RCPT命令对邮件接收者是否可以到达进行确定。相同道理,返回OK表示可以接收,否则表示不能接收,此过程将会在发送方与接收方之间重复若干次,一直到所有邮件被接收完后有一组特别的序列。同理,返回OK表示已经成功处理了邮件。其使用模型如下图所示。
8
[24]
。
四川大学工程硕士学位论文 中小企业web邮件系统的设计与实现
图2-2 SMTP使用模型
因为SMTP具有 “中转”(Relay)的重要特点,只要能与该服务器建立传输层连接,通常用户可以任选一台SMTP服务器来实现邮件的发送处理。如果该服务器M能与目服务器N直接相连接,那么邮件就可以被直接送至N中;如果M、N不能连接,那么M将会向其它的服务器询问路由。如果有另一台服务器L能够与N建立直接连接,或者是目标的路由能够明确,那么邮件就会由M被转至L,再由L转发向至B。无论是服务器间的中转还是从客户机到服务器的直接发送,都是通过使用SMTP同一套指令来进行的,使整个过程更加简单明析。
2.POP3协议
POP3(Post Office Protocol 3)是规定将个人计算机如何连接到Internet的邮件服务器和如何下载电子邮件的电子协议。它能够让用户直接把邮件从服务器上存储到自己的计算机,还可以存储在将服务器里的邮件删除。
POP3是基于以下流程开展各项工作的:初始时,通过侦听TCP端口110开始提供POP3服务;客户主机如果需要享用该种服务,就会与主机建立TCP连接;然后, POP3服务器会和客户交换命令和响应,直至连接终止。
在生命周期中,POP3会话有“确认”、 “操作”、 “更新” “退出”几种不同的状态。进入“确认”状态需要两个条件,一个是POP3服务器发送了确认信息另一个是TCP连接已经打开。这时候必须先确认用户的身份。身份认证后就可以获取相关的资源,这时便到了生命周期的“操作”状态。当客户发出QUIT命令时,就从“操作”状态转入“更新”状态。此时,在前一状态中所获得的资源将被全部释放,同时发送消息,断开连接直至退出。
9
四川大学工程硕士学位论文 中小企业web邮件系统的设计与实现
图2-3 POP3的状态模型
USER Username 对应find_user(username)查询用户是否已注册。
PASS password 对应verify_pwd(username,passwork)验证用户密码是否正确。
STAT对应count_mlist(username)查询该用户邮件数。 3.IMAP4 协议
IMAP4(Internet Message Access Protocol version 4 rev 1)即交互式数据消息访问协议第四个版本。IMAP4设计支持多种访问方式如联机、脱机和断开。随着发展趋势的变化,它的特性必将超过POP3。很多厂商都打算采用IMAP4。IMAP4还拥有很多POP3所没有的功能:如支持多级档夹、远程档夹操作,支持共享档夹,新到邮件通知等优越性能。基于现在的分布式计算环境,IMAP4的优势很明显,适用范围更广。
IMAP定义了3种状态:未确认状态(Non-Authenticated State)、已确认状态(Authenticated State)和已选定状态(Selected State)。对于大多数的IMAP4命令一般都只有在具体某种状态下才会生效。假如IMAP4客户端发送命令时没有在相应的状态下,那么将返回错误的信息。状态不同则客户机向服务器发送的命令也就不同,状态可以在某些命令下相互转换。
初始化连接和服务器问候 非预确认连接 未确认 预确认连接 Login或Authenticate Logout 命令成功, 或服务 已确认 器关闭 或连接 关闭 10 拒绝连接 Logout或服务器关闭或连接关闭 Select 或Examine 命令成功 Select 或Examine命令失败,或Close命令 四川大学工程硕士学位论文 中小企业web邮件系统的设计与实现
已选定 Logout或服务器关闭或连接关闭 注销并关闭连接 图2-4 IMAP状态机 IMAP与POP3的不同之处还在于,POP3客户机一次只能发送一个命令,也就是在第一个命令发出去以后没有得到服务器响应之前第二个命令不能发出。IMAP则一次可发送多个命令请求而不需要等待服务器的响应。IMAP还规定客户机发送命令的时候必须带上一个能够唯一标识此命令的标签或参数。相应的每一个响应也是如此,都在返回时包含了一个卷标,使响应与命令相对应。通常,服务器返回的回应包含“OK”、“NO”、“BAD”、“BYE”、“PREAUTH”等状态的内容。由于IMAP的回应格式较复杂,所以实现起来难度更大。
2.3Web应用J2EE架构
基于MVC模式的web应用一般被分成至少3个各司其职的层次。这些层次是:表现层、持久层、业务层。目前,基于Struts,Hibernate和Spring的轻量级J2EE框架是最流行的框架之一使用Hibernate
表现层StrutsJSPStruts ActionAction FormStruts-config.xml...业务逻辑层SpringTransactionsBusiness ServiceHibernate Session...持久层HibernateQuery LanguageConnecting PoolData Source...[11]
。通过组合Spring、Struts、Hibernate使得每一层都以
一种松耦合的方式彼此沟通。表现层将使用Struts,业务层将使用Spring,持久层
[12]
。架构图见图2-6。
图2-6 Web应用的J2EE架构
1.表现层
表现层是整个WEB应用系统的最前端,使用Struts构建表现层负责接受用户的请求,并根据请求显示正确的页面。一般而言基于Struts的表现层应该提供以
11
四川大学工程硕士学位论文 中小企业web邮件系统的设计与实现
下功能:为用户管理请求和响应;提供一个控制器代理调用业务逻辑和其它上层处理;处理从其它层掷出给一个Struts Action的异常;为显示提供一个模型;执行用户接口验证。
2.持久层
持久层主要为业务逻辑层提供对数据库进行操作的接口。根据数据库表的定义导出表的结构,然后生成对应的映射文件和Java代码使实际数据库结构和Java代码保持一致,同时也有效地节省了手工编码的时间。
值得注意的是不能把持久层逻辑和表现层逻辑搅和在一起。避免诸如JSP或基于Servlet的类等表现层组件里的逻辑和数据存取直接通讯。为了修改应用程序而不影响在其它层的代码,需要把持久层逻辑隔离进自己的层。
3.业务层
业务逻辑层主要完成持久层异常封装、业务逻辑处理、事务管理和持久层Hibernate Session管理等四项主要功能。在一些不合理的架构设计中,会经常存在这种类型的代码,使应用程序紧耦合。随着时间的变化,代这些码也越来越难以维护。而Spring可以解决这个问题。
2.4小结
本章首先介绍了电子邮件系统的基本原理,对电子邮件体系结构和因特网上的电子邮件工作机制作了详细阐述,并对电子邮件的通信协议--SMTP协议,POP3协议和IMAP4 协议--进行了介绍。然后介绍基于MVC模式的web应用框架以及在不同层上的特性。在当前流行的J2EE平台上,表现层、业务层、持久层分别使用Struts、Spring、Hibernate。把Spring、Struts、Hibernate等框架组合在一起构成的web应用系统具有开放性、独立性、复用性和可靠性等特点。
12