
SMTP协议RFC文档中文版.docx
42页RFC821简单邮件传输协议(SMTP)(RFC821 SIMPLE MAIL TRANSFER PROTOCOL)目录1. 介绍 22. SMTP 模型 33. SMTP 过程 43.1. MAIL 43.2. 转发53.3. 确认和扩展 63.4. 发送信件(mailing)和获得信件(sending) 73.5. 打开和关闭 73.6. 转发 83.7. 域 93.8. 改变角色 94. SMTP 说明 94.1. SMTP 命令 94.1.1. 命令语法 94.1.2. COMMAND 语法格式 134.2. SMTP 响应 154.3. 命令和应答序列164.4. 状态图 174.5. 详细内容 184.5.1. 最小实现 184.5.2. 透明性 194.5.3. 大小 19附录A TCP传输服务19附录B NCP传输服务20附录 C NITS 20附录D X.25传输服务20附录E应答码构成方法 20附录F 一些例子 22参考资料361. 介绍简单邮件传输协议(SMTP)的目标是可靠高效地传送邮件,它独立于传送子系统而且仅要求一条可以保 证传送数据单元顺序的通道附录A, B,C和D描述了不同传送服务下SMTP的使用。
在名词表中还定义了本 文档中使用的术语SMTP的一个重要特点是它能够在传送中接力传送邮件,传送服务提供了进程间通信环境(IPCE),此环 境可以包括一个网络,几个网络或一个网络的子网理解到传送系统(或IPCE)不是一对一的是很重要的 进程可能直接和其它进程通过巳知的IPCE通信邮件是一个应用程序或进程间通信邮件可以通过连接在不 同IPCE上的进程跨网络进行邮件传送更特别的是,邮件可以通过不同网络上的主机接力式传送2. SMTP模型SMTP设计基于以下通信模型:针对用户的邮件请求,发送SMTP建立与接收SMTP之间建立一个双向传送 通道接收SMTP可以是最终接收者也可以是中间传送者°SMTP命令由发送SMTP发出,由接收SMTP接收, 而应答则反方面传送一旦传送通道建立,SMTP发送者发送MAIL命令指明邮件发送者如果SMTP接收者可以接收邮件则返回OK 应答SMTP发送者再发出RCPT命令确认邮件是否接收到如果SMTP接收者接收,则返回OK应答;如果不 能接收到,则发出拒绝接收应答(但不中止整个邮件操作),双方将如此重复多次当接收者收到全部邮件 后会接收到特别的序列,如果接收者成功处理了邮件,则返回OK应答。
SMTP提供传送邮件的机制,如果接收方与发送方连接在同一个传送服务下时,邮件可以直接由发送方主机传 送到接收方主机;或者,当两者不在同一个传送服务下时,通过中继SMTP服务器传送为了能够对SMTP服 务器提供中继能力,它必须拥有最终目的主机地址和邮箱名称MAIL命令参数是回复路径,它指定邮件从何处来;而RCPT命令的参数是转发路径的,它指定邮件向何 处去向前路径是源路径,而回复路径是返回路径(它用于发生错误时返回邮件)当同一个消息要发往不同的接收者时,SMTP遇到了向不同接收者发送同一份数据的复制品的问题,邮件 命令和应答有一个比较奇怪的语法,应答也有一个数字代码在下面,例子中可以看到哪些使用实际的命令 和应答完整的命令和应答在第四节命令与应答对大小写不敏感,也就是说,命令和应答可以是大写,小写或两者的混合,但这一点对用户 邮件名称却不一定是对的,因为有的主机对用户名大小写是敏感的这样SMTP实现中就将用户邮箱名称保留 成初始时的样子,主机名称对大小写不敏感命令与应答由ASCII字母表组成,当传送服务提供8位字节传送通道,每7位字符正确传送,而最高位 被填充为0当指定一般的命令或应答格式后,参数会由一些类似于语言的字符串表示出来,如"
3. SMTP过程本节提供了 SMTP中的一些过程头一个说明的是基本发送过程(定义为发送操作)下来描述向前传送 邮件,确认邮箱名称和扩展邮件列表,发送到终端和打开关闭交换在本节的最后是对中断,邮件域的说明 本节的例子只是一部分命令和应答的序列,完整的例子见附录F3.1. MAIL在SMTP发送操作中有三步,操作由MAIL命令开始给出发送者标识一系列或更多的RCPT命令紧跟其后, 给出了接收者信息,然后是DATA命令列出发送的邮件内容,最后邮件内容指示符确认操作过程中的第一步是MAIL命令,< reverse-path >包括源邮箱MAIL
如 果接收者未知,接收方会返回一个550 Failure应答此过程可能会重复若干次〈forward-path >不仅包括邮件,它是主机和目的邮箱的路由表,在其中的第一个主机就是接收命令的主 机过程中的第三步是发送DATA命令DATA
S:MAILFROM:<>R: 250 OKS:RCPTTO:<>R: 250 OKS:RCPTTO:<>R: 550 No such user hereS:RCPTTO:<>R:250 OKS:DATAR:S:Blah blah blah...S:...等等S:
接收方拒绝接收此用户的信件,发送者必须根据提供的信息重 新发送或者向原发送者返回错误信息下例显示了这些响应的应用转发的例子S:RCPTTO:<>R:251Usernotlocal;willforwardto<>或者S:RCPTTO:<>R:551Usernotlocal;pleasetry<>3.3. 确认和扩展SMTP提供了另外的确认用户名和扩展邮件列表的功能这些功能由VREF和EXPN命令完成,它们都以字 符串为参数对于VREF命令,字符串参数指的是用户名,对此命令的响应要包括用户的命名和用户的邮箱 对于EXPN命令,字符串参数指的是邮件列表,对此命令的响应多于一个,它们要包括所有列表中用户的命名 和他们的邮箱用户名”是一个多余的项目,它是故意被加上的如果主机采用VREF命令和EXPN命令,最后本地邮 箱必须提供用户名使它被主机确认如果主机选择由另外的字符串作为用户名,也是允许的在一些主机中,邮箱列表和一个邮箱的代名有一点不清楚,因为一般的数据结构可能包括两种类型的入 口如果要发出对邮件列表的确认,应该给出确定响应在接收到这个消息后,主机将把邮件传送到列表上 所有的地址上去,如果没有接收到确定响应,就会报告错误。
例如,"550 That is a mail list, not a user name"如果请求用于扩展一个用户名,可能通过返回包括一个名字的列表来形成确定响应,如果没有接收到 确定响应,就会报告错误例如,"550 That is a user name, not a mailing list”)在多个响应的情况下(通常是对于EXPN而言的),每个应答指定一个邮箱在模糊请求的情况下,例如 "VRFY Smith”,这里两个 Smith 的响应必须是"553 User ambiguous”确认用户名的情况如下例所示:例3:确认用户名S:VRFYSmithR:250FredSmith<>或者S: VRFY SmithR:251Usernotlocal;willforwardto<>或者S: VRFY JonesR: 550 String does not match anything.或者S: VRFY JonesR:551Usernotlocal;pleasetry<>或者S: VRFY GourzenkyinplatzR: 553 User ambiguous.邮箱列表要求多个响应的情况如下例所示:S: EXPN Example-PeopleR:250-JonPostel<>R:250-FredFonebone<>R:250-SamQ.Smith<>R:250-<>R:250<>或者S: EXPN Executive-Washroom-ListR: 550 Access Denied to You.VERF和EXPN命令的字符串命令参数因为具体实现的不同而不能再加以限制了。
在一些系统上,EXPN命 令的参数可能是一个包含邮件列表的文件名,但是在Internet上有许多不同的文件结构VRFY和EXPN命令在最小实现中并不包括,当它们实现时,它们也不要求被在传送间实现3.4. 发送信件(mailing)和获得信件(sending)SMTP的主要目的是将邮件发送到用户的邮箱中由一些主机提供的类似的功能是把邮件送至用户的终端 (如果用户正打开终端)将邮件送到用户的邮箱中称为发送信件(mailing);而送至用户终端则称之为获 得信件(。












