邮件协议--SMTP协议

原文地址:

http://www.javashuo.com/article/p-kqijmvgy-km.html 

一、SMTP协议简介浏览器

SMTP称为简单邮件传输协议(Simple Mail Transfer Protocal),目标是向用户提供高效、可靠的邮件传输。它的一个重要特色是它可以在传送中接力传送邮件,即邮件能够经过不一样网络上的主机接力式传送。一般它工做在两种状况下:一是邮件从客户机传输到服务器;二是从某一个服务器传输到另外一个服务器。SMTP是一个请求/响应协议,它监听25号端口,用于接收用户的Mail请求,并与远端Mail服务器创建SMTP链接。安全

二、SMTP协议工做机制服务器

SMTP一般有两种工做模式。发送SMTP和接收SMTP。具体工做方式为:发送SMTP在接收到用户的邮件请求后,判断此邮件是否为本地邮件,如果直接投送到用户的邮箱,不然向DNS查询远端邮件服务器的MX记录,并创建与远端接收SMTP之间的一个双向传送通道,此后SMTP命令由发送SMTP发出,由接收SMTP接收,而应答则反方向传送。一旦传送通道创建,SMTP发送者发送MAIL命令指明邮件发送者。若是SMTP接收者能够接收邮件则返回OK应答。SMTP发送者再发出RCPT命令确认邮件是否接收到。若是SMTP接收者接收,则返回OK应答;若是不能接收到,则发出拒绝接收应答(但不停止整个邮件操做),双方将如此反复屡次。当接收者收到所有邮件后会接收到特别的序列,入伏哦接收者成功处理了邮件,则返回OK应答。网络

三、SMTP的链接和发送过程dom

(a)创建TCP链接测试

(b)客户端发送HELO命令以标识发件人本身的身份,而后客户端发送MAIL命令;编码

         服务器端正但愿以OK做为响应,代表准备接收spa

(c)客户端发送RCPT命令,以标识该电子邮件的计划接收人,能够有多个RCPT行;.net

         服务器端则表示是否愿意为收件人接收邮件3d

(d)协商结束,发送邮件,用命令DATA发送

(e)以.表示结束输入内容一块儿发送出去

(f)结束这次发送,用QUIT命令退出

示例以下:

  1. C: telent SMTP.163.com 25  //以telenet方式链接163邮件服务器  
  2. S: 220 163.com Anti-spam GT for Coremail System //220为响应数字,其后的为欢迎信息  
  3. C: HELO SMTP.163.com //除了HELO所具备的功能外,EHLO主要用来查询服务器支持的扩充功能   
  4. S: 250-mail  
  5. S: 250-AUTH LOGIN PLAIN  
  6. S: 250-AUTH=LOGIN PLAIN  
  7. S: 250 8BITMIME //最后一个响应数字应答码以后跟的是一个空格,而不是'-'   
  8. C: AUTH LOGIN   //请求认证  
  9. S: 334 dxNlcm5hbWU6  //服务器的响应——通过base64编码了的“Username”=  
  10. C: Y29zdGFAYW1heGl0Lm5ldA==  //发送通过BASE64编码了的用户名  
  11. S: 334 UGFzc3dvcmQ6  //通过BASE64编码了的"Password:"=  
  12. C: MTk4MjIxNA==  //客户端发送的通过BASE64编码了的密码  
  13. S: 235 auth successfully  //认证成功   
  14. C: MAIL FROM: bripengandre@163.com  //发送者邮箱  
  15. S: 250 … .  //“…”表明省略了一些可读信息  
  16. C: RCPT TO: bripengandre@smail.hust.edu.cn //接收者邮箱  
  17. S: 250 … .    // “…”表明省略了一些可读信息  
  18. C: DATA //请求发送数据  
  19. S: 354 Enter mail, end with "." on a line by itself  
  20. C: Enjoy Protocol Studing  
  21. C: .  
  22. S: 250 Message sent  
  23. C: QUIT //退出链接   
  24. S: 221 Bye  
C: telent SMTP.163.com 25  //以telenet方式链接163邮件服务器
S: 220 163.com Anti-spam GT for Coremail System //220为响应数字,其后的为欢迎信息
C: HELO SMTP.163.com //除了HELO所具备的功能外,EHLO主要用来查询服务器支持的扩充功能 
S: 250-mail
S: 250-AUTH LOGIN PLAIN
S: 250-AUTH=LOGIN PLAIN
S: 250 8BITMIME //最后一个响应数字应答码以后跟的是一个空格,而不是'-' 
C: AUTH LOGIN   //请求认证
S: 334 dxNlcm5hbWU6  //服务器的响应——通过base64编码了的“Username”=
C: Y29zdGFAYW1heGl0Lm5ldA==  //发送通过BASE64编码了的用户名
S: 334 UGFzc3dvcmQ6  //通过BASE64编码了的"Password:"=
C: MTk4MjIxNA==  //客户端发送的通过BASE64编码了的密码
S: 235 auth successfully  //认证成功 
C: MAIL FROM: bripengandre@163.com  //发送者邮箱
S: 250 … .  //“…”表明省略了一些可读信息
C: RCPT TO: bripengandre@smail.hust.edu.cn //接收者邮箱
S: 250 … .    // “…”表明省略了一些可读信息
C: DATA //请求发送数据
S: 354 Enter mail, end with "." on a line by itself
C: Enjoy Protocol Studing
C: .
S: 250 Message sent
C: QUIT //退出链接 
S: 221 Bye

其余命令:

VRFY——用于验证给定用户邮箱是否存在,以及接收关于该用户的详细信息;

EXPN——用于扩充邮件列表

四、邮件的路由过程

SMTP服务器是基于“域名服务DNS中计划收件人的域名来路由电子邮件”。SMTP服务器基于DNS中的MX记录来路由电子邮件,MX记录注册了域名和相关的SMTP中的主机,属于该域的电子邮件都应向该主机发送。

若SMTP服务器mail.abc.com收到一封信要发送到shuser@sh.abc.com:

a: SendMail请求DNS给出主机sh.abc.com的CNAME记录,若有,倘若CNAME到shmail.abc.com,则再次请求shmail.abc.com的CNAME记录,直到没有为止;

b: 假定被CNAME到shmail.abc.com,而后SendMail请求@abc.com域的DNS给出shmail.abc.com的MX记录,

    shmail MX 5 shmail.abc.com

    10 shmail2.abc.com

c: SendMail作好请求DNS给出shmail.abc.com的A记录,即IP地址,若返回值为1.2.3.4

d: SwndMail与1.2.3.4链接,传送这封信给shuser@sh.abc.com的信到1.2.3.4这台服务器的SMTP后台程序。

五、SMTP经常使用的命令

SMTP命令不区分大小写,但参数区分大小写。经常使用命令以下:

HELO <domain> <CRLF>——向服务器标识用户身份发送者能欺骗、说谎,但通常状况下服务器都能检测到

RCPT TO: <forward-path> <CRLF>——<forward-path>用来标志邮件接收者的地址,经常使用在MAIL FROM后,能够有多个RCPT TO

DATA <CRLF>——将以后的数据做为数据发送,以<CRLF>.<CRLF>标志数据的结尾

REST <CRLF>——重置会话,当前传输被取消

NOOP <CRLF>——要求服务器返回OK应答,通常用做测试

QUIT <CRLF>——结束会话

VRFY <string> <CRLF>——验证指定的邮箱是否存在,因为安全方面的缘由,服务器大多禁止此命令

EXPN <string> <CRLF>——验证给定的邮箱列表是否存在,因为安全方面的缘由,服务器大多禁止此命令

HELP <CRLF>——查询服务器支持什么命令

六、SMTP经常使用的响应

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——开始邮件输入,以“.”结束

554——操做失败

七、使用SMTP的必要性

通常的PC资源不够,处理能力不够,不可能全天候地链接在因特网上来收发邮件。因此使用SMTP服务器,可让多个用户共用服务器,有效地下降了成本。

八、SMTP和邮件格式的关系

能够用一个比较形象的例子来讲明:甲与乙书信来往,甲经过邮局向乙发送信件,邮局见转交邮件可当作使用了SMTP协议,至于书信的格式则会由于地区习惯等的不一样而不一样,这个书信格式可当作是邮件格式的标准。

九、浏览器发送邮件使用的协议

浏览器发送邮件的过程:

例如:bripengandre@126.com可经过登录www.126.com来收发邮件

bripengandre@126.comwww.126.com提供的邮件页面上填写的相应信息(如发信人邮箱、收信人邮箱等),经过http协议被提交给126服务器;126服务器根据这些信息组装一封符合邮件规范的邮件(就像用户代理同样);而后smtp.126.com经过SMTP协议将这封邮件发送到接收端邮件服务器。

由此可知,浏览器发送邮件只是用户代理的功能直接放到邮件服务器上去作了,至于邮件服务器见发送邮件仍然采用的是SMTP协议。