SMTP基本命令

  SMTP的基本命令  2006-09-06 09:05:19

分类:

 

SMTP定义了14个命令,它们是:

HELO 
MAIL FROM: 
RCPT TO: 
DATA 
RSET 
SEND FROM: 
SOML FROM: 
SAML FROM: 
VRFY 
EXPN 
HELP [ ] 
NOOP 
QUIT 
TURN 
其中使得SMTP工作的基本的命令有7个,分别为:HELO﹑MAIL﹑RCPT﹑DATA﹑REST﹑NOOP和QUIT.下面分别介绍如下。

HELO--发件方问候收件方,后面是发件人的服务器地址或标识。收件方回答OK时标识自己的身份。问候和确认过程表明两台机器可以进行通信,同时状态参量被复位,缓冲区被清空。

MAIL--这个命令用来开始传送邮件,它的后面跟随发件方邮件地址(返回邮件地址)。它也用来当邮件无法送达时,发送失败通知。为保证邮件的成功发送,发件方的地址应是被对方或中间转发方同意接受的。这个命令会清空有关的缓冲区,为新的邮件做准备。

RCPT --这个命令告诉收件方收件人的邮箱。当有多个收件人时,需要多次使用该命令,每次只能指明一个人。如果接收方服务器不同意转发这个地址的邮件,它必须报550错误代码通知发件方。如果服务器同意转发,它要更改邮件发送路径,把最开始的目的地(该服务器)换成下一个服务器。

DATA--收件方把该命令之后的数据作为发送的数据。数据被加入数据缓冲区中,以单独一行是"."的行结束数据。结束行对于接收方同时意味立即开始缓冲区内的数据传送,传送结束后清空缓冲区。如果传送接受,接收方回复OK。

REST--这个命令用来通知收件方复位,所有已存入缓冲区的收件人数据,发件人数据和待传送的数据都必须清除,接收放必须回答OK.

NOOP--这个命令不影响任何参数,只是要求接收放回答OK, 不会影响缓冲区的数据。

QUIT--SMTP要求接收放必须回答OK,然后中断传输;在收到这个命令并回答OK前,收件方不得中断连接,即使传输出现错误。发件方在发出这个命令并收到OK答复前,也不得中断连接。

下面是SMTP答复中用到的代码和含义:

500 Syntax error, command unrecognized
[This may include errors such as command line too long]
501 Syntax error in parameters or arguments
502 Command not implemented
503 Bad sequence of commands
504 Command parameter not implemented
211 System status, or system help reply
214 Help message
[Information on how to use the receiver or the meaning of a
particular non-standard command; this reply is useful only to the human user]
220 Service ready
221 Service closing transmission channel
421 Service not available, closing transmission channel
[This may be a reply to any command if the service knows it must shut down]
250 Requested mail action okay, completed
251 User not local; will forward to 
450 Requested mail action not taken: mailbox unavailable
[E.g., mailbox busy]
550 Requested action not taken: mailbox unavailable
[E.g., mailbox not found, no access]
451 Requested action aborted: error in processing
551 User not local; please try 
452 Requested action not taken: insufficient system storage
552 Requested mail action aborted: exceeded storage allocation
553 Requested action not taken: mailbox name not allowed
[E.g., mailbox syntax incorrect]
354 Start mail input; end with .
554 Transaction failed

 

------------------------------------------------------------------------------------------------------

1.SMTP是工作在两种情况下:一是电子邮件从客户机传输到服务器;二是从某一个服务器传输到另一个 

  服务器 
2.SMTP是个请求/响应协议,命令和响应都是基于ASCII文本,并以CR和LF符结束。响应包括一个表示返  
  回状态的三位数字代码 
3.SMTP在TCP协议25号端口监听连接请求 
4.连接和发送过程: 
a.建立TCP连接 
b.客户端发送HELO命令以标识发件人自己的身份,然后客户端发送MAIL命令 
  服务器端正希望以OK作为响应,表明准备接收 
c.客户端发送RCPT命令,以标识该电子邮件的计划接收人,可以有多个RCPT行  
  服务器端则表示是否愿意为收件人接受邮件 
d.协商结束,发送邮件,用命令DATA发送 
e. 以.表示结束输入内容一起发送出去 
f.结束此次发送,用QUIT命令退出。 


5.另外两个命令: 
VRFY---用于验证给定的用户邮箱是否存在,以及接收关于该用户的详细信息。 
EXPN---用于扩充邮件列表。 

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

若SMTP服务器mail.abc.com收到一封信要发到[email protected]

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. Sendmail与1.2.3.4连接,传送这封给[email protected]的信到1.2.3.4这台服务器的SMTP后台程序 

7.SMTP基本命令集: 

命令       描述 
------------------------------ 
HELO      向服务器标识用户身份 
          发送者能欺骗,说谎,但一般情况下服务器都能检测到。 

MAIL      初始化邮件传输 
          mail form : 
RCPT      标识单个的邮件接收人;常在MAIL命令后面 
          可有多个rcpt to: 
DATA      在单个或多个RCPT命令后,表示所有的邮件接收人已标识,并初始化数据传输,以.结束。 
VRFY      用于验证指定的用户/邮箱是否存在;由于安全方面的原因,服务器常禁止此命令 
EXPN      验证给定的邮箱列表是否存在,扩充邮箱列表,也常被禁用 
HELP      查询服务器支持什么命令 
NOOP      无操作,服务器应响应OK 
QUIT      结束会话 
RSET      重置会话,当前传输被取消 
-------------------------------- 

8. MAIL form 命令中指定的地址是称作 envelope form 地址,不需要和发送者自己的地址是一致的。 
   RCPT TO 与之等同,指明的接收者地址称为envelope to地址,而与实际的to:行是什么无关。 
9.为什么没有RCPT CC和RCPT BCC:? 
   所有的接收者协商都通过RCPT TO命令来实现,如果是BCC,则协商发送后在对方接收时被删掉信封接收者 
10.邮件被分为信封部分,信头部分和信体部分 
   envelope form , envelope to 与message form :, message to:完全不相干。 
   evnelope是由服务器主机间SMTP后台提供的,而message form /to是由用户提供的。有无冒号也是区别。 

11. 怎样由信封部分检查是否一封信是否是伪造的? 
a. received行的关联性。 
   现在的SMTP邮件传输系统,在信封部分除了两端的内部主机处理的之个,考虑两个公司防火墙之间 
   的部分,若两台防火墙机器分别为A和B,但接收者检查信封received:行时发现经过了C.则是伪造的。 
b. received:行中的主机和IP地址对是否对应如: 
   Receibed: form  galangal.org (turmeric.com [104.128.23.115] by mail .bieberdorf.edu.... 
c. 被人手动添加在最后面的received行: 
    Received: form  galangal.org ([104.128.23.115]) by mail .bieberdorf.edu (8.8.5) 
    Received: form  lemongrass.org by galangal.org (8.7.3) 
    Received: form  graprao.com by lemongrass.org (8.6.4) 

猜你喜欢

转载自shenchuochuo.iteye.com/blog/2317073