简单邮件传输协议

1.什么是简单邮件传输协议[1]

简单邮件传输协议是指TPTCP/IP网络在MTA之间传递邮件的协议。SMTP是目前使用最广泛的邮件协议,UA向MTA发送电子邮件也使用SMTP。

2.简单邮件传输协议的内容[1]

SMTP使用的TCP端口号是25,接收端在TCP的25号端口等待发送端来的E-mail,发送端向接收方(即服务器)发出连接要求,一旦连接成功,即进行邮件信息交换,邮件传递结束后释放连接。图1列出了SMTP协议的常用命令。

图1SMTP协议的常用命令

Image:SMTP协议的常用命令.jpg

下面给出一个用SMTP传递邮件的典型过程。例如,我们假定一个名叫unix.ict.ac.cn的计算机(作为域ict.ac.cn的邮件服务器)要发送下列信件:

Date:Sat 27 April 2002 13:26:3l BJ

From:lu@ ict.ac.cn

TO:liu @ cnc.ac.cn

Subject:meetinq

Let us get together Monday at lpm

首先要注意的是,根据SMTP标准(RFC822),信件必须用纯ASCII码发送。该标准还规定了诸如邮件头、空一行、然后是信件本体这样的通用结构。详细定义的邮件头中行的语法,由关键字(keyword)及随后的具体值(value)两部分组成。在我们的例子中,收件人由liu @ cnc.ac.cn表示,它简单地对应计算机xenix.cnc.ac.cn(作为域cnc.ac.cn的邮件服务器)上的用户liu;发件人由1u @ ict.ac.cn表示,它对应计算机unix.ict.ac.cn上的用户1u。

发送方邮件软件从本地计算机的通信主机登记表(在UNIX操作系统上,主机表放在/etc/hosts文件中)或网上的名字服务器那里得知xenix.cnc.ac.cn的IP地址是128.6.4.2,然后邮件程序打开一个连接到128.6.4.2的25号端口。unix和xenix都是多用户操作系统,双方计算机的邮件服务都位于本地主机。25号是众所周知的接收邮件的端口号。一旦连接建立,发送方邮件程序就开始发送命令。下面列出的是典型会话:

Image:发送方邮件软件典型会话.jpg

每行开头都标出该行信息是从unix还是从xenix发出的。在我们的例子中是unix主动发起连接的。按照标准,命令都使用普通正文。在示例会话中,命令HELO、MAIL、RCPT、DATA和QUIT都足标准ASCII命令,这样就给观察和诊断带来方便,可以将每个会话的轨迹放在一个记录文件中,以供检查,标准还规定,应答都以数字开头,并限定可以使用的应答格式。使用数字保证用户程序的应答无二义性。应答数字的后面辅以正文,通常只是为了供人阅读和记录,对于程序的操作没有影响。可能已经注意到了,会话以HELO起始,它给出启动连接的发送端邮件服务器的域名,然后描述发送者和接收者。如果邮件要发给多个用户,则可以有多个RCPT命令。最后发送数据。要注意,邮件的正文用仅包含一个句点“·”的行结束。

需要强调的是,SMTP规定了对任一给定命令可以发送的应答。以2开头的应答表示成功,以3开头的应答表明需要有进一步的动作。4和5开头表示错误:4开头是暂时性错误,比如磁盘满;5开头则是永久性错误,例如接收用户不存在。图2列出了SMTP协议的应答代码。这些应答代码分类如图3所示。

图2SMTP协议的应答代码

Image:SMTP协议的应答代码.jpg

图3SMTP应答代码分类

Image:SMTP应答代码分类.jpg

从上面的例子可以看出,邮件传递分五大部分:第一部分是建立邮件连接,第二部分是标识发送者,第三部分是标识接收者,第四部分是传递邮件数据,第五部分是结束邮件连接。