SMTP协议

SMTP协议定于RFC2821.这是一个相当容易遵守的协议,不管是对人或对计算机而言,因为它的设定很任性话,也颇为宽松。SMTP是用来发送的协议,送出邮件的一方成为客户端(client),接受邮件的一方成为服务器端(server),客户端要传送邮件时,必须主动连接到服务器端,并展开所谓的“SMTP”对话,对话的内容是一系列简单命令(client ->server)与响应(server -> client)以及要传送的信息本身。

认识SMTP协议的最佳方法是实际观察两端之间的对话内容。在你架设好的MTA(邮件传输代理)之后(或者你知道哪里有现成的MTA),可以使用Telnet亲身体验如何使用SMTP协议来送出邮件。用Telnet模拟如下:

$ telnet localhost 25
Trying 127.0.0.1…
Connected to localhost.
Escape character is ‘^]’.
220 mail.blogbus.cn ESMTP Postfix (Debian/GNU)
HELO mail.blogbus.cn
250 mail.blogbus.cn
MAIL FROM:<blogbus@blogbus.cn>
250 2.1.0 Ok
RCPT TO:<kanfa@blogbus.cn>
250 2.1.5 Ok
DATA
354 End data with <CR><LF>.<CR><LF>
Date:
Sta, 21 Feb 2009 19:22:21 +0800
From:blogbus@blogbus.cn
To:kanfa@blogbus.cn
Reply-To:kanfa@blogbus.cn
Subject:Test is ok

This is test mail for telnet!
.
250 2.0.0 Ok: queued as B8E1828577
quit
221 2.0.0 Bye
Connection closed by foreign host.

这个例子模拟了如何将邮件发送到kanfa@blogbus.cn服务器上的SMTP server,一开始我们使用Telnet登录到localhost的25端口上,接着出现如下信息:

Trying 127.0.0.1…
Connected to localhost.
Escape character is ‘^]’.
220 mail.blogbus.cn ESMTP Postfix (Debian/GNU)

这段信息是Telnet自己显示出来的,真正的SMTP对话没有这一段,在Telnet连接成功后,出现的是SMTP server的响应信息:220 mail.blogbus.cn ESMTP Postfix (Debian/GNU)

SMTP的响应信息有固定的格式,一开始必定是三位数的响应码,接着是一段适合人们阅读的简短信息。响应信息代表前几次命令的接受状态,对客户端而言,只有第一个数字有意义,下面整理了各级响应代码与他们对应的意义

2×× 请求的动作已经接受并完成,客户端可以继续下一步

3×× 命令不接受,因为服务器还需要更多信息,客户端应该以其他命令提供充足信息。

4×× 暂时性失败,若客户端下次尝试同样动作,或许有机会成功

5×× 永久性失败。客户端不应该继续尝试同样动作。

客户端在收到欢迎消息之后必须以HELO这个命令介绍自己。HELO命令后面必须是对客户端自己的完整主机名称

服务器端响应成功后让客户端可以继续下一步,客户端使用MAIL FROM命令表示发信者的邮箱地址,客户端使用RCPT TO命令指出收件人邮箱地址。

当然这只是最简单那的SMTP对话。还有许多其他的命令存在。

此条目发表在 Excellence Article 分类目录,贴了 标签。将固定链接加入收藏夹。

发表评论

电子邮件地址不会被公开。 必填项已用 * 标注

*

您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="" highlight="">