邮件系统之smtp协议

1 smtp

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

2 smtp协议交互

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

SMTP的连接和发送过程

(a)建立TCP连接

(b)客户端发送HELO命令以标识发件人自己的身份,然后客户端发送MAIL命令;

        服务器端正希望以OK作为响应,表明准备接收

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

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

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

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

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

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

 

 

3 smtp协议指令

 

SMTP 命令命令功能

HELO

客户端为标识自己的身份而发送的命令(通常带域名)

EHLO

使服务器可以表明自己支持扩展简单邮件传输协议 (ESMTP) 命令。

MAIL FROM

标识邮件的发件人;以 MAIL FROM: 的形式使用。

RCPT TO

标识邮件的收件人;以 RCPT TO: 的形式使用。

TURN

允许客户端和服务器交换角色,并在相反的方向发送邮件,而不必建立新的连接。

ATRN

ATRN (Authenticated TURN) 命令可以选择将一个或多个域作为参数。如果该会话已通过身份验证,则 ATRN 命令一定会被拒绝。

SIZE

提供一种使 SMTP 服务器可以指出所支持的最大邮件大小的机制。兼容的服务器必须提供大小范围,以指出可以接受的最大邮件大小。客户端发送的邮件不应大于服务器所指出的这一大小。

ETRN

SMTP 的扩展。SMTP 服务器可以发送 ETRN 以请求另一台服务器发送它所拥有的任何电子邮件。

PIPELINING

提供发送命令流(而无需在每个命令之后都等待响应)的能力。

CHUNKING

替换 DATA 命令的 ESMTP 命令。该命令使 SMTP 主机不必持续地扫描数据的末尾,它发送带参数的 BDAT 命令,该参数包含邮件的总字节数。接收方服务器计算邮件的字节数,如果邮件大小等于 BDAT 命令发送的值时,则该服务器假定它收到了全部的邮件数据。

DATA

客户端发送的、用于启动邮件内容传输的命令。

DSN

启用传递状态通知的 ESMTP 命令。

RSET

使整个邮件的处理无效,并重置缓冲区。

VRFY

确认在邮件传递过程中可以使用邮箱;例如,vrfy ted 确认在本地服务器上驻留 Ted 的邮箱。该命令在 Exchange 实现中默认关闭。

HELP

返回 SMTP 服务所支持的命令列表。

QUIT

终止会话。

 

扩展的 SMTP 命令命令功能

X-EXPS GSSAPI

Microsoft Exchange Server 2003 和 Exchange 2000 Server 服务器用来进行身份验证的方法。

X-EXPS=LOGIN

Exchange 2000 和 Exchange 2003 服务器用来进行身份验证的方法。

X-EXCH50

在服务器到服务器通信的过程中,提供传播邮件属性的能力。

X-LINK2STATE

在 Exchange 中添加链接状态路由支持。

 

4 smtp协议返回码

状态码描述
211 System status, or system help reply
系统状态或显示系统帮助。
214 Help message
显示系统帮助,通常用于显示非标准命令的帮助。
220 <domain> Service ready
服务就绪。
221 <domain> Service closing transmission channel
服务关闭了传输通道。
250 Requested mail action okay, completed
所要求的邮件动作完成,可以继续邮件对话。通常在EHLO/HELO命令后会通过“250-”来描述服务器所支持的特性。
251 User not local; will forward to <forward-path>
收件人非本地用户,将转发到 <forward-path>。
354 Start mail input; end with <CRLF>.<CRLF>
开始接收邮件内容输入,以<CRLF>.<CRLF>(即单行一个点)结束输入。
421 <domain> Service not available, closing transmission channel
无法提供正常服务,关闭传输管道。邮件保留在本地,可能会尝试重新投递。通常这种情况发生在服务器遇到问题,必须关闭传输。
450 Requested mail action not taken: mailbox unavailable
所要求的邮件动作无法执行:邮箱不可用。邮件保留在本地,可能会尝试重新投递。通常这种情况发生在邮箱忙或被拒绝等。
451 Requested action aborted: local error in processing
要求动作中断:本地端发生错误。邮件保留在本地,可能会尝试重新投递。通常这种情况发生在系统投递时遇到意外的错误。
452 Requested action not taken: insufficient system storage 要求动作无法执行:系统空间不足。邮件保留在本地,可能会尝试重新投递。通常这种情况发生在邮箱限额满。
500 Syntax error, command unrecognized
命令格式错误,不可识别。当命令行太长时也会发生这样的错误。
501 Syntax error in parameters or arguments
命令参数错误。
502 Command not implemented
命令尚未实现。
503 Bad sequence of commands
错误的命令顺序。
504 Command parameter not implemented
命令的参数尚未实现。
 543  
550 Requested action not taken: mailbox unavailable
所要求动作无法执行:信箱不存在。不再尝试投递。
551 User not local; please try <forward-path>
收件人不属于本地用户,转发到<forward-path>。不再尝试投递。
552 Requested mail action aborted: exceeded storage allocation
所要求的动作中断:超出所分配的储存空间。不再尝试投递。
553 Requested action not taken: mailbox name not allowed
所要求的动作未执行:不接受该信箱。通常发生在邮件地址错误、被作为垃圾邮件拒收。不再尝试投递。
554 Transaction failed
传输失败。

 

 

 

 

posted @ 2024-10-28 11:34  圣光救赎者  阅读(32)  评论(0编辑  收藏  举报