Simple Mail Transfer Protocol

奶牛老爹 2013-04-30

SMTP是一种提供可靠且有效电子邮件传输的协议。SMTP是建模在FTP文件传输服务上的一种邮件服务,主要用于传输系统之间的邮件信息并提供来信有关的通知。

SMTP独立于特定的传输子系统,且只需要可靠有序的数据流信道支持。SMTP重要特性之一是其能跨越网络传输邮件,即“SMTP邮件中继”。通常,一个网络可以由公用互联网上TCP可相互访问的主机、防火墙分隔的TCP/IP网络上TCP可相互访问的主机,及其它LAN/WAN中的主机利用非TCP传输层协议组成。使用SMTP,可实现相同网络上处理机之间的邮件传输,也可通过中继器或网关实现某处理机与其它网络之间的邮件传输。

在这种方式下,邮件的发送可能经过从发送端到接收端路径上的大量中间中继器或网关主机。域名服务系统(DNS)的邮件交换服务器可以用来识别出传输邮件的下一跳IP地址。

SMTP端口号是多少?

2525是SMTP端口,110是POP端口。

SMTP是一种请求响应协议,客户端发送命令,服务器返回响应,两者通过这种方式进行交互,以完成邮件传输过程的三个阶段:建立连接、传输数据和终止连接。

客户端主动连接到服务器的25端口,建立TCP连接。服务器会发送一个应答码为220的问候报文,表示已经准备就绪。

客户端向服务器发送HELO命令,用以标识发送方的身份,HELO命令的参数必须是一个合法的主机名。如果服务器接受了连接请求,会给客户端返回一个代码为250的应答,表示可以开始报文传输。

客户端发送MAIL命令标识邮件的发送方,通过FROM参数指定发送方的电子邮件地址。如果服务器准备接收邮件,则返回代码为250的OK应答。

客户端发送RCPT命令标识邮件的接收方,通过TO参数指定接收方的电子邮件地址,如果有多个接收人,可以发送多个RCPT命令。如果服务器能够识别接收人,则会返回代码为250的OK应答,否则返回代码为550的失败应答。

客户端与服务器之间的协商结束,客户端发送DATA命令指示将要发送邮件数据,服务器端返回应答码为354的响应进行确认,表示可以开始邮件输入。客户端将邮件内容按行发送,邮件的末尾由客户端指定,是只有一个小数点(邮件数据结束指示器)的一行,服务器检测到邮件数据结束指示器后,返回代码为250的OK应答。

客户端发送QUIT命令终止连接。

SMTP命令和FTP命令一样,都是使用NVTASCII格式的文本,以明文传输的。SMTP简捷的原因之一是它使用的命令少,SMTP的最小实现仅需要8种命令就够了。

常用SMTP命令一览表

命令描述

HELO用于启动邮件传输过程

MAILFORM用于初始化邮件传输

RCPTTO用于标识单个邮件接收人,在MAIL命令后面可有多个RCPT命令

DATA用于将邮件报文发送给服务器

QUIT用于终止客户端与服务器之间的连接

RSET用于中止当前的邮件事务并使两端复位

VRFY用于验证指定的用户/邮箱是否存在,即验证接收方地址是否正确NOOP空操作命令

HELO命令:该命令是客户用来标识自己而使用的,其变量是客户主机的域名。例如HELO:smtp.bjut.edu.cn

MAILFROM命令:该命令是客户用来标识发信人而使用的,它的变量是发信人的电子邮件地址。例如MAILFROM:wangqm@bujt.edu,cn

RCPTTO命令:该命令是客户用来标识预期的收信人而使用的,它的变量是收信人的电子邮件地址。若有多个收信人,则命令要重复使用。例如RCPTTO:xiaolizi@bujt.edu.cn

DATA命令:该命令是客户用来发送真正的报文。在DATA命令后面所有的行都被当作是邮件报文。报文的终止是只包含一个点的行。例如

DATAThisisthemessagetobesenttothecompanyQUIT命令:结束报文。例如QUIT

RSET命令:该命令使当前的邮件事务异常中止,所存储的关于发信人收信人的信息都被删除,连接将被复位。例如RSET

VRFY命令:该命令用来验证收信人的地址,它作为变量发送出去。发送端可以请接收端证实一个名字是否标识一个有效的收信人。例如VRFY:wangqm@bjut.edu.cnNOOP命令:该命令由客户使用,用来检查收信人的状态,它需要收信人的回答。例如NOOP对于这些命令的顺序有一定的限制。对话的第一个命令必须是HELLO命令,此命令在此后的会话中也可以使用。如果HELLO命令的参数不可接受,必须由返回一个501失败应答,同时接收到的SMTP必须保持在与刚才一致的状态下。

saka.dlut.edu.cn#  telnet mail.foo.com 25
Trying 192.168.1.4...
Connected to here.foo.com.Escape character is '^]'.
220 here.foo.com ESMTP Sendmail 8.8.8/8.8.8; Sat, 14 Mar 1998 21:28:41 -0500 (EST)
HELO 
saka.dlut.edu.cn
250 here.foo.com 
Hello root@saka.dlut.edu.cn [192.168.1.3], pleased to meet you
MAIL FROM: root@saka.dlut.edu.cn
250 root@saka.dlut.edu.cn... 
Sender ok
RCPT TO: hollingd@foo.com250 hollingd... 
Recipient ok
DATA
354 Enter mail, end with "." on a line by itself
Hi dave - this message is a test of SMTP.250 VAA07541 Message accepted for delivery
DATA
354 Enter mail, end with "." on a line by itself
Hi dave - this message is a test of SMTP....foo...250 VAA0771 Message accepted for delivery
•
最终信息:Hi dave - this message is a test of SMTP..foo.

POP3的连接过程

1)POP3命令及执行过程

假设用C表示客户端(Client),S表示服务器端(Server)。

客户端首先使用TCP与POP3服务器建立连接,连接成功后,服务器发送一个单行的确认信息,然后要求客户端发送用户名和密码进行确认,下面是客户端发送的命令:

①发送用户名。

格式:USER<用户名>

服务器返回:+OK用户名正确;-ERR用户名错误。

示例:C:USERmyname@126.comS:+OKwelcomeonthisserver.

②发送密码用户名确认成功后,客户端再发送密码。

语法形式:PASS<密码>功能:将客户的密码发送给服务器。服务器返回:+OK表示密码正确;-ERR表示密码错误。

示例:C:PASS*****S:+OKmynameloggedinat19:042)服务器对用户名和密码验证成功后,客户端就可以发送POP3命令要求服务器执行相应的操作。对于每个命令,服务器都会返回应答信息。常用命令有:

①STAT命令格式:STAT功能:从服务器中获邮件总数和总字节数。服务器返回:邮件总数和总字节数。

示例:C:STATS:+OK2320

②LIST命令格式:LIST功能:从服务中获得邮件列表和大小。服务器返回:列出邮件列表和大小。

示例:C:LISTS:+OK2messages(320octets)S:1120S:2200S:.注意,“.”单独占一行。

③RETR命令格式:RETR<邮件的序号>功能:从服务器中获得一个邮件。服务器返回:+OK成功;-ERR错误。

示例:C:RETR1S:+OK120octetsS:<服务器发送信件1内容>S:.注意,“.”单独占一行。

④DELE命令语法形式:DELE<邮件的序号>功能:服务器将邮件标记为删除,当执行QUIT命令时才真正删除。服务器返回:+OK成功;-ERR错误。

示例:C:DELE1S:+OK1Deleted

⑤QUIT命令格式:QUIT功能:关闭与服务器的连接。服务器返回:+OK;-ERR。示例:C:QUITS:+OK然后服务器自动断开与该客户端的连接。

相关推荐