一、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加密技术后,当数据从一方发送到另一方时,发送方先对数据进行假面,然后把密文发送给对方。保证在网络上传输的是经过加密的数据,即使被截获,由于没有秘钥,也无法获取明文。接收方接收后先对数据进行解密,再进行处理,实现会话双方信息的安全传递,保证信息的保密性完整性。