您的位置:首页 > 运维架构

电子邮件收发原理和实现(POP3, SMTP) [整理]

2014-11-21 16:53 316 查看
转自:http://univasity.iteye.com/blog/1173296

电子邮件的收发流程示意图: 



 



相对于邮件客户端的流程就是: 



 

邮件接收——POP3协议 

POP3(Post Office Protocol 3,邮局协议版本3)主要用于支持使用客户端远程管理在服务器上的电子邮件。该协议是在RFC-1939中定义的,是Internet上的大多数人用来接收邮件的机制。POP3采用Client/Server工作模式,默认使用TCP 110端口。
* 在使用POP协议时,人们熟悉的很多功能,如查看收到了多少新邮件消息的功能,POP根本不支持。这些功能都内置到诸如Eudora或 Microsoft Outlook之类的邮件程序中,能为您记住接收的上一封邮件,以及计算有多少新邮件这类信息。因此,如果想获取这类信息,将需要由自己进行计算。 

[详细请参考wiki的解析:http://zh.wikipedia.org/wiki/POP3 ]

 

<POP3状态图> 



 

<POP3常用命令表> 



* 对大小写不敏感,以CRLF作为结束

[详细可参考RFC1939协议,http://www.rfc-ref.org/RFC-TEXTS/1939/contents.html ]

>> 命令可能的返回值 

+ OK <描述>  成功

- ERR <描述> 失败

<POP3工作原理> 

1)        客户端使用TCP协议连接邮件服务器的110端口;

2)        客户端使用USER命令将邮箱的账号传给POP3服务器;

3)        客户端使用PASS命令将邮箱的账号传给POP3服务器;

4)        完成用户认证后,客户端使用STAT命令请求服务器返回邮箱的统计资料;

5)        客户端使用LIST命令列出服务器里邮件数量;

6)        客户端使用RETR命令接收邮件,接收一封后便使用DELE命令将邮件服务器中的邮件置为删除状态;

7)        客户端发送QUIT命令,邮件服务器将将置为删除标志的邮件删除,连接结束。

(注:客户端UA可以设定将邮件在邮件服务器上保留备份,而不将其删除。)

一个基本实现(Java): 

Pop3Test.java (见附件)

 

邮件发送——SMTP协议 

SMTP(Simple Message Transfer Protocol,简单邮件传输协议)是用于传送电子邮件的机制。该协议是在RFC-821中定义的。采用Client/Server工作模式,默认使用TCP 25端口。

[详细请参考wiki的解析:http://zh.wikipedia.org/wiki/SMTP ]

<SMTP状态图> 



 
<SMTP常用命令表> 



* 对大小写不敏感,以CRLF作为结束

[详细可参考RFC821协议,中文版链接地址:http://www.5dmail.net/rfc/RFC821.txt ]

>> 命令可能的返回值 

500 格式错误,命令不可识别(此错误也包括命令行过长)

501 参数格式错误

502 命令不可实现

503 错误的命令序列

504 命令参数不可实现

211 系统状态或系统帮助响应

214 帮助信息

220 <domain> 服务就绪

221 <domain> 服务关闭传输信道

421 <domain> 服务未就绪,关闭传输信道(当必须关闭时,此应答可以作为对任何命令的响应)

250 要求的邮件操作完成

251 用户非本地,将转发向<forward-path>

450 要求的邮件操作未完成,邮箱不可用(例如,邮箱忙)

550 要求的邮件操作未完成,邮箱不可用(例如,邮箱未找到,或不可访问)

451 放弃要求的操作;处理过程中出错

551 用户非本地,请尝试<forward-path>

452 系统存储不足,要求的操作未执行

552 过量的存储分配,要求的操作未执行

553 邮箱名不可用,要求的操作未执行(例如邮箱格式错误)

354 开始邮件输入,以<CRLF>.<CRLF>结束

554 操作失败

<SMTP工作原理> 

1)        客户端使用TCP协议连接SMTP服务器的25端口;

2)        客户端发送HELO报文将自己的域地址告诉给SMTP服务器;

3)        SMTP服务器接受连接请求,向客户端发送请求账号密码的报文(AUTH LOGIN);

4)        客户端向SMTP服务器传送账号和密码,如果验证成功,向客户端发送一个OK命令,表示可以开始报文传输;

5)        客户端使用MAIL命令将邮件发送者的名称发送给SMTP服务器;

6)        SMTP服务器发送OK命令做出响应;

7)        客户端使用RCPT命令发送邮件接收者地址,如果SMTP服务器能识别这个地址,就向客户端发送OK命令,否则拒绝这个请求;

8)        收到
4000
SMTP服务器的OK命令后,客户端使用DATA命令发送邮件的数据。

9)        客户端发送QUIT命令终止连接。 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: