邮件系统的实现原理和协议解析

一、Email的原理     

       Email邮件系统由用户代理MUA-->输出队列Outgoing Queue-->报文传输代理message transfer agent -->邮箱mailbox组成。具体流程如下:

1、 客户机通过邮件用户代理将邮件发送到输出队列,等待发送

2、 邮件通过发送方的传输代理进行传送,传送给接收方的传输代理MTA

3、 MTA传送给邮箱-收件方的用户代理MUA,最终传递给客户机

       其中邮件核心部分

1、 MTA负责完成邮件的存储和转发

2、 两个MTA之间通过TCP协议连接

3、 MTA使用的主要协议有SMTP、POP3 

二、Email编码标准

       一般电子邮件在送达到收件人的过程中,要经过多台主机的转接、传输服务。如果多台主机间编码方式不同,如分别使用ASCII或8-bit clean,邮件可能会被破坏。所以无论邮件的内容是汉字或图片,在发送之前都统一进行编码。

       常见的email编码有:

1、UU编码 unix-to-unix encoding,使用UU编码后的内容形如 ?7T]/*O/[“TL+KU*W

2、MIME编码 multipurpose internet mailextension,多媒体邮件传送模式,可传送各种格式的多媒体文件。MIME编码中定义了两种编码方式Base64和QP(Quote-printable)。

       1)QP适用于非ASCII码的文字内容,例如中文文件,编码之后的外观类似于“=C2=D2=EB=AD=C0”,它将8位字符表示为3位(1个=和两个十六进制数),一个汉字一般都以两个8位字符表示,故使用QP会编码成6个字符,例如“=C2=D2”表示“乱”字。

       2)Base64一般用于以附件的方式发出的各种文件进行编码,邮件头上会有“Content-Transfer-Encoding:base64”字样。

        编码方式不会影响编码之后的文件大小,一般具有MIME编码功能的email软件大多能自动判别邮件的编码方式,然后自动选择base64或QP进行解码。

三、Email邮件协议

1、POP3协议

       post office protocol version 3,现在常用的是第三版,所以简称为 POP3。POP3协议能够让客户端程序提取驻留在服务器的邮件。用于电子邮件的接收POP3 采用Client/Server工作模式。当客户机需要服务时,客户端的软件(Outlook Express或FoxMail)将与POP3服务器建立TCP连接,此后要经过POP3协议的三种工作状态,

       1) 认证状态:首先是认证过程,确认客户机提供的用户名和密码

       2)处理状态:在认证通过后便转入处理状态,在此状态下用户可收取自己的邮件或做邮件的删除。

       3)更新状态:在完成响应的操作后客户机便发出quit命令,此后便进入更新状态,将做删除标记的邮件从服务器端删除掉。到此为止整个POP过程完成。   

        客户端常用命令:

       1)Stat 获取邮箱的状态如邮件数量及大小

       2)RETR msg 下载指定邮件

       3)DELE msg 将指定邮件标记为删除

       4)QUIT 结束会话

2、IMAP协议

       Internet Message Access Protocol,主要提供的是通过Internet获取信息的一种协议。IMAP像POP那样提供了方便的邮件接收下载服务,让用户能进行离线阅读,但IMAP能完成的却远远不只这些。IMAP提供的摘要浏览功能可以让你在阅读完所有的邮件到达时间、主题、发件人、大小等信息后才作出是否下载的决定。也就是说,当用户PC机上的IMAP客户端程序先支持看到邮件的首部信息,当用户需要打开某个邮件时,该邮件才会传到用户邮箱文件夹。在用户未发出删除邮件的命令之前,邮件会在IMAP邮箱服务器(支持IMAP协议的邮箱服务器)中一直保存着。

3、SMTP协议

       Simple mail transfer protocol,用于定义邮件传输的协议,基于TCP的应用层协议。目标是向用户提供高效、可靠的邮件传输。它能够在传送中接力传送邮件,即邮件可以通过不同网络上的主机接力式传送。工作在两种情况下:一是电子邮件从客户机传输到服务器;二是从 某一个服务器传输到另一个服务器。 SMTP是个请求/响应协议,它监听25号端口,用于接收用户的邮件请求,并与远端邮件服务器建立SMTP连接。

       客户端常用命令:

       1)HELO 客户端向对方邮件服务器发出标示自己的命令。

       2)Mail From用来标示发送者的邮件地址

       3)RCPT TO 标示接受者的邮件地址,如果邮件接收者不是本地用户,说明希望对方邮件服务器为自己转发Relay该邮件,如果该邮件服务器允许转发,表示此邮件服务器是open relay的。否则说明该邮件服务器不允许relay。

       通常,登录web可使用mail等客户端直接阅读邮件,但如果希望使用本地的MUA如foxmail、outlook阅读邮件则本地客户端通过POP3或IMAP协议与邮件服务器交互,将邮件传递到本地客户端(Foxmail) 

四、WEB邮件系统结构及实现

1、结构

       WEB邮件系统是结合了email和WWW的邮件系统,客户端通过浏览器进行邮件的编写阅读接收发送。 

       客户端(浏览器)——>WWW服务器(服务器扩展MUA)—POP3—>MTA——>邮箱

       1) 用户通过浏览器访问WWW服务器,而WWW服务器通过扩展(如使用ASP\PHP等)来完成MUA的功能

       2) MUA访问MTA来获取邮件,MTA从邮箱中获取邮件进行传递

       3)MUA通过WWW服务器返回给客户端浏览器

2、实现

       1)Dephi实现MTA邮件服务器端的功能-每个用户使用单独的目录进行管理,按照日期保存并提供详尽的日志管理。对用户提供了过滤邮件、群组邮件、管理通讯录等功能功能

       2)PHP实现MUA客户端-使用PHP实现了POP3协议,MIME编码和QP编码,使用户在浏览器环境下完成email邮件系统的基本功能。 

       通过功能,将邮件服务器分为SMTP服务器(MTA传送作用)、POP3服务器(MUA接收邮件作用),编码主要是调用相关协议的命令实现信息交互和邮件传递。 

五、Java Mail API

       Java mail API  java提供的公用API,支持各种电子邮件协议,如IMAP\POP3\SMTP。其核心类归纳如下:

1、 javax.mail.Session

       定义了基本邮件会话,所有类均继承与Session,从properties对象中获取信息,如邮件发送服务器、 发送协议、接受协议、用户名密码以及整个应用程序中的共享其他信息。

2、 javax.mail.Store 

       Store是访问接收邮件服务器上邮件账户的入口,通过store类的getFolder方法可访问到指定邮件文件夹

3、javax.mail.Folder

       Folder代表邮件文件夹,用于分析组织邮件,通过folder类可访问邮件夹中的邮件

4、javax.mail.Message

       Message类代表电子邮件,封装了邮件信息,包括地址、邮件标题、发送日期、接受日期、邮件内容等。

5、javax.mail.Address

       邮件地址,是一个抽象类,常用子类为javax.mail.internetAddress.

6、javax.mail.Transport

       指定邮件的发送协议(通常是SMTP),通过指定的邮件服务器来发送邮件,也是一个抽象类,提供了send(Message)静态方法来发送邮件 

六、SSL传输加密

       Internet上传输存在链各个不安全因素:传递过程中用户信息被截获、用户访问的web站点为个人网上欺骗非法站点。 

       SSL是保证网络上两个节点之间进行安全通信的机制,SSL可以用来建立安全的网络连接,网络通信协议如HTTP和IMAP都采用了SSL机制,把采用SSL机制的HTTP称为HTTPS,使用SSL加密技术后,当数据从一方发送到另一方时,发送方先对数据进行假面,然后把密文发送给对方。保证在网络上传输的是经过加密的数据,即使被截获,由于没有秘钥,也无法获取明文。接收方接收后先对数据进行解密,再进行处理,实现会话双方信息的安全传递,保证信息的保密性完整性。

你可能感兴趣的:(邮件系统的实现原理和协议解析)