您好,欢迎访问三七文档
SMTP(SimpleMailTransferProtocol)协议基本介绍•SMTP(SimpleMailTransferProtocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。•SMTP协议属于TCP/IP协议族,它帮助每台计算机在发送或中转信件时找到下一个目的地。通过SMTP协议所指定的服务器,就可以把Email寄到收信人的服务器上了。•SMTP服务器则是遵循SMTP协议的发送邮件服务器,用来发送或中转发出的电子邮件。•采用ASCII文本形式组织邮件内容,非常直观和简单SMTP在邮件通信中的位置•SMTP,即简单邮件传送协议,所对应RFC文档为RFC821。同http等多数应用层协议一样,它工作在C/S模式下,用来实现因特网上的邮件传送。•SMTP在整个电子邮件通信中所处的位置如图所示。SMTP在邮件通信中的位置电子邮件的通信过程•可以看出,SMTP是用来将客户机上的邮件传送到服务器上•客户机是指某次连接中的发送方•服务器是指相应的接收方用户代理•用户代理UA(UserAgent)是用户与电子邮件系统的交互接口,一般来说它就是PC机上的一个程序。Windows上常见的用户代理是Foxmail和OutlookExpress。•用户代理提供一个好的用户界面,它提取用户在其界面填写的各项信息,生成一封符合SMTP等邮件标准的邮件,然后采用SMTP协议将邮件发送到发送端邮件服务器。邮件服务器•邮件服务器是电子邮件系统的核心,它用来发送和接收邮件。邮件服务器不同于普通PC的是它几乎是全天工作的,所以它可以在任何时候为用户提供服务。•很多ISP都提供免费的邮件服务器,如126提供smtp.126.com邮件服务器。•邮件服务器向其它邮件服务器转发邮件也是采用SMTP协议。SMTP使用命令和响应在MTA客户和MTA服务器之间传送报文。每一个命令都以回车和换行的行结束符标记终止。命令与应答对大小写不敏感,也就是说,命令和应答可以是大写,小写或两者的混合,但这一点对用户邮件名称却不一定是对的,因为有的主机对用户名大小写是敏感的。这样SMTP实现中就将用户邮箱名称保留成初始时的样子,主机名称对大小写不敏感。发送方和接收方之间的通信是一问一答的交替对话形式,由发送者控制。发送发出一条命令,接收者发出一个响应。接收者在发送下一条指令前必须等应答。一个重要的应答是连接应答。在连接完成时,接收者通常会发送220服务就绪。发送者在继续发送指令前会等待此应答SMTP的通信模型:针对用户的邮件请求,发送SMTP建立与接收SMTP之间建立一个双向传送通道。接收SMTP可以是最终接收者也可以是中间传送者。SMTP命令由发送SMTP发出,由接收SMTP接收,而应答则反方面传送。一旦传送通道建立,SMTP发送者发送MAIL命令指明邮件发送者。如果SMTP接收者可以接收邮件则返回OK应答。SMTP发送者再发出RCPT命令确认邮件是否接收到。如果SMTP接收者接收,则返回OK应答;如果不能接收到,则发出拒绝接收应答(但不中止整个邮件操作),双方将如此重复多次。当接收者收到全部邮件后会接收到特别的序列,如果接收者成功处理了邮件,则返回OK应答。邮件•邮件是一种消息的格式,由信封、首部和正文组成•信封上最重要的是收信人的地址。邮件服务器用这个地址将邮件发送到收信人所在的邮件服务器上。•首部是由用户代理或邮件服务器添加的一些信息。包括Received、Message-ID、From、Data、Reply-To、X-Phone、X-Mailer、To和Subject等字段。•正文是是发送用户发给接收用户报文的内容。RFC822规定正文为NVTASCII文字行。更为详细的说明,请参考RFC821和RFC822等协议。邮件的收发过程一般情况下,一封邮件的发送和接收过程如下。•1)发信人在用户代理里编辑邮件,包括填写发信人邮箱、收信人邮箱和邮件标题等等。•2)用户代理提取发信人编辑的信息,生成一封符合邮件格式标准(RFC822)的邮件。•3)用户代理用SMTP将邮件发送到发送端邮件服务器(即发信人邮箱所对应的邮件服务器)。•4)发送端邮件服务器用SMTP将邮件发送到接收端邮件服务器(即收信人邮箱所对应的邮件服务器)。•5)收信人调用用户代理。用户代理用POP3协议从接收端邮件服务器取回邮件。•6)用户代理解析收到的邮件,以适当的形式呈现在收信人面前SMTP详解-通信过程一个具体的SMTP通信(如发送端邮件服务器与接收端服务器的通信)的过程如下。•1)发送端邮件服务器(以下简称客户端)与接收端邮件服务器(以下简称服务器)的25号端口建立TCP连接。•2)客户端向服务器发送各种命令,来请求各种服务(如认证、指定发送人和接收人)。•3)服务器解析用户的命令,做出相应动作并返回给客户端一个响应。•4)2)和3)交替进行,直到所有邮件都发送完或两者的连接被意外中断命令和响应•SMTP的命令不多(14个),它的一般形式是:COMMAND[Parameter]CRLF。其中COMMAND是ASCII形式的命令名,Parameter是相应的命令参数,CRLF是回车换行符(0DH,0AH)。•SMTP的响应也不复杂,它的一般形式是:XXXReadableIllustration。XXX是三位十进制数;ReadableIllustration是可读的解释说明,用来表明命令是否成功等。•XXX具有如下的规律:以2开头的表示成功,以3开头的表示未完成(进行中),以4和5开头的表示失败常用命令HELLO(HELO)此命令用于向接收SMTP确认发送SMTP。参数域包括发送SMTP的主机名。接收SMTP通过连接确认命令来向发送SMTP确认接收SMTP。引命令和OK响应确认发送和接收SMTP进入了初始状态,也就是说,没有操作正在执行,所有状态表和缓冲区已经被子清除。MAIL(MAIL)此命令用于开始将邮件发送到一个多个邮箱中。参数域包括回复路径。返回路径中包括了可选的主机和发送者邮箱列表。当有主机列表时,它是一个回复路径源,它说明此邮箱是由在表中的主机一一传递发送(第一个主机是最后一个接收到此邮件的主机)过来的。此表也有作向发送者返回非传递信号的源路径。因为每个传递主机地址都被加在此表起始处,它就必须使用发送IPCE而不是接收IPCE(如果它们不是一个IPCE的话)清楚的名称。一些出错信息的回复路径可能就是空的。此命令清除回复路径缓冲区,转发路径缓冲区和邮件内容缓冲区,并且将此命令的回复路径信息插入到回复路径缓冲区中。RECIPIENT(RCPT)此命令用于确定邮件内容的唯一接收者;多个接收者将由多个此命令指定。转发路径中包括一个可选的主机和一个必须的目的邮箱。当出现主机列表时,这就是一个源路径,它指明邮件必须向列表中的上一个主机发送。如果接收SMTP未实现邮件的传递发送,就会返回如未知本地用户(550)的信息给用户。DATA(DATA)接收者将跟在命令后的行作为邮件内容。此命令导致此命令后的邮件内容加入邮件内容缓冲区。邮件内容可以包括所有128个ASCII码字符。邮件内容由只包括一个句号的行结束,也就是如下的字符序列:CRLF.CRLF,它指示了邮件的结束。SEND(SEND)此命令用于开始一个发送命令,将邮件发送到一个或多个终端上。参数域包括了一个回复路径,此命令如果成功就将邮件发送到终端上了SENDORMAIL(SOML)此命令用于开始一个邮件操作将邮件内容传送到一个或多个终端上,或者传送到邮箱中。对于每个接收者,如果接收者终端打开,邮件内容将被传送到接收者的终端上,否则就送到接收者的邮箱中。参数域包括回复路径,如果成功地将信息送到终端或邮箱中此命令成功。SENDANDMAIL(SAML)此命令用于开始一个邮件操作将邮件内容传送到一个或多个终端上,并传送到邮箱中。如果接收者终端打开,邮件内容将被传送到接收者的终端上和接收者的邮箱中。参数域包括回复路径,如果成功地将信息送到邮箱中此命令成功。RESET(RSET)此命令指示当送邮件操作将被放弃。任何保存的发送者,接收者和邮件内容应该被抛弃,所有缓冲区和状态表应该被清除,接收方必须返回OK应答。VERIFY(VRFY)此命令要求接收者确认参数是一个用户。如果这是(已经知道的)用户名,返回用户的全名和指定的邮箱。此命令对回复路径缓冲区,转发路径缓冲区和邮件内容缓冲区没有影响。EXPAND(EXPN)此命令要求接收者确认参数指定了一个邮件发送列表,如果是一个邮件发送列表,就返回表中的成员。如果这是(已经知道的)用户名,返回用户的全名和指定的邮箱。此命令对回复路径缓冲区,转发路径缓冲区和邮件内容缓冲区没有影响。HELP(HELP)此命令导致接收者向HELP命令的发送者发出帮助信息。此命令可以带参数,并返回特定的信息作为应答。此命令对回复路径缓冲区,转发路径缓冲区和邮件内容缓冲区没有影响。TURN(TURN)此命令指定接收方要么发送OK应答并改变角色为发送SMTP,要么发送拒绝信息并保持自己的角色。如果程序A现在是发送SMTP,它发出TURN命令后接收到OK(250)应答,它就变成了接收SMTP。程序A就进入初始状态,好象通信信道刚打开一样,这时它发送220准备好服务信号。如果程序B现在是接收SMTP,它发出TURN命令后接收到OK(250)应答,它就变成了发送SMTP。程序A就进入初始状态,好象通信信道刚打开一样,这时它准备接收220准备好服务信号。若要拒绝改变角色,接收方可以发送502应答。常用响应•SMTP响应是从服务器发送到客户端的三位十进制数字,后面可以跟着附加的文本信息,第一位数字的意义如下:•1).正面完成应答。若第一位数字是2,表示所请求的命令已经成功完成,新的命令可以开始。•2).正面中间应答。若第一位数字是3,表示所请求的命令已被接受,但在完成请求的命令之前,收件人需要更多的一些信息。•3).暂时负面完成应答。若第一位数字是4,表示所请求的命令已被拒绝,但差错条件是暂时的,这个命令可以重新发送。•4).永久负面完成应答。若第一位数字是5,表示所请求的命令已被拒绝,且这个命令不能重新发送。SMTP通信过程举例大小一些对象需要最大和最小大小。也就是说,每个实现必须能够接收大于最小大小的对象,不能发送大于最大大小的对象。对于可能的最大大小,实现技术上并没有限制。•用户用户名的最大长度是64个字节。•域域的最大长度是64个字符•路径回复路径和转发路径的最大长度是256个字符•命令行命令行的最大长度,包括回车符为512个字符•应答行应答行的最大长度,包括回车符为512个字符•文本行文本行的最大长度,包括回车符和为透明性增加的字符不得超过1000个字符•接收缓冲区接收缓冲区最多可以容纳100个接收者
本文标题:SMTP协议_浅谈
链接地址:https://www.777doc.com/doc-2849743 .html