基于IE-Web Service邮件收发系统的设计与实现
QooIC.com 新闻出处:电子市场 | 发布时间:2010/11/12 15:21:20
1 引言
随着信息时代的来临,Intenret/Intranet的迅速发展使电子邮件已经成为人们必不可少的通信工具。电子邮件的普及性、方便性以及其数据的多样性使它成为人们存储自己重要信息、数据的方式。目前,电子邮件客户端的收发工具(软件或系统)日新月异。而现代化的移动办公要求处理收发邮件用的客户程序或系统应该可以随时随地的方便使用,而Web方式的邮件收发系统恰恰满足了这样的需求。这样,基于IE-Web Service的邮件收发系统也就成了邮件收发系统的最佳解决方案之一。
XM 以 eX tensibleM arkupL anguage)是一种可扩展的标记语言,能够被广泛地用于对各种内容的标记,它本身不包含任何语义,只有当用于某一应用环境时,才具有一定的含义。它被称为“Internet环境的ASCII码”,可见其技术的重要性。
We bS er vice(Web服务)是新兴的一种中间件技术,它以SOAPA JDDI等技术为基础,实现Intenret上的以“服务”为基础的松藕合的过程调用。而在这些过程调用过程中,以XML作为信息表示和传递的载体。Web服务是一个软件接口,它描述了一组操作,可以在网络上通过标准化的XML消息传递来访问这组操作。它使用基于XML语言的协议(SOAP协议)来描述要执行的操作或者要与另一个Web服务交换的数据。Web服务所使用的XML可以用真正与平台无关的方式来描述任何(所有)数据,以便跨系统交换数据。而且,Web服务可以在较抽象的层面上工作,较抽象层面可以按照需要动态地重新评估、修改或处理数据类型。所以,从技术层面上讲,Web服务可以更方便地处理数据,允许软件更自由地进行通信。
邮件 收 发 系统就是采用WebS ervice(Web服务)技术,在服务器端通过由Java语言提供的Mail包实现收邮件和发邮件两个Web服务程序接口。在客户端通过利用IE提供的控件,在VBScript中实现对接口的远程调用,从而完成邮件的收发过程。另外,邮件收发系统主要是完成对邮件内容信息的撰写、接收、显示以及和SMTP、POPS服务器的交互工作,本身并没有提供邮件服务器的存储转发功能。
2 系统概述
从图1中可以看出,在发邮件的过程中,浏览器调用Web服务的SendMail接口,并把SMTP服务器地址、收信人地址、发信人地址、认证信息、邮件主题、邮件内容以及附件等封装在HTTP协议与Web服务器进行通讯传递给SendMail接口,Web服务器收到口,接受并匹配参数,执行发邮件服务的内部处理逻辑,并通过SMTP协议与SOAP包里,并作为调用参数通过SOAP包后先解析包,确定调用接SMTP服务器进行通讯,把邮件发往SMTP服务器。如果失败,则同样通过SOAP协议返回一个出错状态码给浏览器,浏览器再解析SOAP包,并在浏览器显示出错信息。如果成功,则SOAP协议返回一个正确状态码,浏览器显示成功信息。流程如图2a所不。

3 客户端的设计客户 端 ( 浏览器端)的主要功能是邮件的书写、显示、SOAP包的封装、发送与接收。邮件的书写界面主要是采用了htmI的表单技术,邮件的显示主要采用VBScript的Document对象向浏览器进行邮件内容的输出,在此包后先解析包,确定调用接口,接受并匹配参数,执行收邮件的内部处理逻辑,并通过POP3协议与POP邮件服务器进行通讯,把邮件接收到本地。如果成功,而且有新邮件,那就把邮件信息封装成SOAP包,通过HTTP协议返回给浏览器。浏览器再解析SOAP包,并在浏览器里显示所有的邮件信息。如果没有新邮件,则在浏览器里显示没有新邮件。如果接收邮件失败,则在浏览器里显示失败信息。流程如图2b所示。

在收 邮 件 的过程中,浏览器调用Web服务的ReceiveMail接口,并把POP3邮件服务器地址,用户名和密码封装成SOAP包,作为调用参数通过HTTP协议发送到Web服务器的ReceiveMail接口。Web服务器收到SOAP包后先解析包,确定调用接口,接受并匹配参数,执行收邮件的内部处理逻辑,并通过POP3协议与POP邮件服务器进行通讯,把邮件接收到本地。如果成功,而且有新邮件,那就把邮件信息封装成SOAP包,通过HTTP协议返回给浏览器。浏览器再解析SOAP包,并在浏览器里显示所有的邮件信息。如果没有新邮件,则在浏览器里显示没有新邮件。如果接收邮件失败,则在浏览器里显示失败信息。流程如图2b所示。
(1) SO AI 〕协议。SOAP(SimpleO bjectA ccessP rotocol),即简单对象访问协议,也被称作XMLP。是在分散或分布式的环境中交换信息的简单协议,是一个基于XML的协议。它为两个程序交换信息提供了一种标准的工作机制。它包括3个部分:SOAP封装(envelop),SOAP编码规则(encoding rules),SOAP绑定(binding)。它是Web Service的基本通信协议,同时,SOAP规范还定义了HTTP协议如何传输SOAP包。
(2) SM T P协议。SMTP(SimpleM ailT ransferP rotocol),即简单邮件传输协议,它定义了发送电子邮件的机制,SMTP服务器可将消息中转至接收方SMTP服务器,以便最终让用户经由POP或IMAP获得。此协议只支持传输7bit的字节流,这就决定了SMTP协议只能传输简单的ASCII字符集的纯文本英文邮件。
(3) PO P3 协议。POP(PostO fficeP rotocol),即邮局协议。目前用的是版本3,所以人们通常将它称为POP3oPOP和SMTP一样,也是一种机制。该协议规定每个用户只能有一个邮箱,支持用户从自己的SMTP服务器上拿到自己的邮件。
(4) M IM E协议。MIME( MultipurposeIn tenretM ailE xtensions),即多用途Intenret邮件扩展标准。它不是邮件传输协议,而是对传输内容的消息、附件及其它的内容定义了格式。当人们要发送复杂邮件内容时,就必须通过MIME 协议把内容组织成为符合SMTP协议要求的形式,然后通过已有的SMTP协议进行邮件传输。
3 客户端的设计
客户端(浏览器端)的主要功能是邮件的书写、显示、SOAP包的封装、发送与接收。邮件的书写界面主要是采用了htmI的表单技术,邮件的显示主要采用VBScript的Document对象向浏览器进行邮件内容的输出,在此不予赘述。下面主要介绍SOAP包的封装、发送与接收。
3.1 SOAP包的封装
SOAP封装结构定义了一个整体框架用来表示消息中包含什么内容,谁来处理这些内容以及这些内容是可选的或是必需的。根据SOAI〕规范,一个SOAP消息应该包括以下部分:
(1) 封 装 。元素名是“Envelope",在SOAP消息中必须出现,可以包含名域声明和附加属性。如果包含附加属性,这些属性必须限定名域。
(2) SO AP 头。元素名是“Header",在SOAP消息中可能出现。如果出现的话,必须是SOAP封装元素的第一个直接子元素。SOAP头可以包含多个条目,每个都是SOAP头元素的直接子元素。所有SOAP头的直接子元素都必须限定名域。
(3) SO A P体。元素名是“Bod广,在SOAP消息中必须出现,且必须是SOAP封装元素的直接子元素。它必须直接跟在SOAP头元素(如果有的话)之后。否则它必须是SOAP封装元素的第一个直接子元素。SOAP体可以包括多个条目,每个条目必须是SOAP体元素的直接子元素。SOAP体元素的直接子元素可以限定名域。
另外 , 由 于SOAP包其实是一个XML文档,所以必须有XML的申明,而且必须在文档的开头进行描述。
根据 以 上 的描述,代码如下:

3.2 SOAP包的发送
过程主要用到浏览器的两个标准控件(版本5.0以后提供):MSXML.D OMDocument和Msxm12.X MLHTTP.
DOMDocument代表XML_ DOM树的最高节点,可以通过创建它来创建一个新的DOM树。XMLHTTP可以向服务器发送任意的HTTP请求,并接收响应。由于它与微软的XML _ DOM解析器完全整合。因此,它可以直接的从MSXML DOM对象中发送请求体,也可以把响应直接解析成一个MSXML DOM对象。
系统中,先创建一个DOMDocument对象,然后用load方法把封装好的SOAP包装人这个对象,再通过XMLHTTP的。pen方法建立与Web Service的连接,最后再用它的send方法把SOAP HTTP请求发往Web服务器。代码如下:

4 服务器端Web Service的设计
服务器端对请求的处理流程:WebS ervice是放在Web服务器后面的,客户端生成的SOAP请求会被嵌人在一POST请求中发送到Web服务器来。Web服务器再把这些请求转发给Web Service请求(SOAP请求)。请求处理器解析收到的SOAP请求,调用Web Service后再生成相应的SOAP应答。Web服务器得到SOAP应答后,再通过HTTP应答的方式把它送回客户端。
系统服务器端WebS ervice的主要功能是利用Jav aMail与SMTP,PO P服务器进行交互,从而实现邮件的发送和接收,并为客户端提供SendMail和ReceiveMail接口。
SendMail接口设计:由于要接受来自客户端(浏览器)的SMTP服务器地址,收信人地址,发信人地址,邮件主题,邮件内容等信息,因此,接口必须设置同样的参数以接收这些信息,接口设计如下:

邮件发送处理逻辑:一条MIEM 邮件消息由消息头和消息体组成。消息头里包含邮件消息的发送地址,邮件主题等信息。而消息体又可以由许多部分组成。在处理MIME 消息时,消息体中每部分都是Bod尸art或MimeBodyPart,不同的Bodypart结合成一个容器,称为Multipart或MimeMultipart。发送一条消息,需要创建不同的部件,将这些部件结合成一个Multipart(多部件)。然后将这个Multipart添加到MIME 邮件消息的消息体中进行发送。
所以,首先要做的是设置消息头,代码如下:

Msg是个自定义类,用来暂时存储邮件信息。
接收邮件逻辑:通过与POP服务器的连接,把所有的邮件消息接收到本地,然后再对每一条消息进行处理,获得每一条消息的发件人地址,邮件主题以及邮件内容等信息,并把这些信息存储到自定义类数组中。
下面给出对一条消息的消息体处理逻辑:当ReceiveMail接口获取到一个Message的输人流后,首先用输人流构造一个Message对象,然后分别判断消息体内的各个部分,如果是bodypart,就读出其内容并存储于msg类中。如果是Multipart,然后再判断此容器内的各个部分,如果是bodypart,就读出其内容并存储于msg类中,如果还是Multipart,则重复以上操作,不断循环,直到读出每一个bodypart部份。以下是代码片断:

当接口设计好后,应该把它们发布为Web Service,由于发布工具很多,也很简单,在这里就不做阐述。
5、结束语
通过 以 上 的介绍,建立起了基于IE-Services的邮件收发系统。它是基于WebS ervice的一个应用,而建立在XML基础上的Web services技术将是软件行业的发展方向。可以肯定,以XML为基础的Web Service技术时代将不可避免。基于XML安全的研究也将是XML技术发展的必然。系统由于是基于XML技术,因此,能够很容易与XML安全产品进行无缝整合,从而成为一个比较安全的邮件系统。另外,也是一种远程调用Web Service方法的一种有力探索。