工作中~
分类:
2008-07-22 14:59:11
这是一个相当容易遵守的协议不管是对人或对计算机而言,因为它的设定很人性化,也颇为宽松。SMTP是用来送信的协议,送出邮件的一方称为“客户端”(client) ,接受邮件的一方称为“服务器端” (server)。客户端要传送邮件时,必须主动连接到服务器端,并展开所谓的“ SMTP对话”,对话内容是一系列简单的命令(client->server )与响应(serverc-> lient)以及要传送的信息本身。
认识SMTP协议的最佳方法是实际观察两端之间的对话内容。在你架设好MTA之后(或是你知道哪里有现成的MTA,可以使用telnet亲身体验如何使用协smtp议来送出邮件。下例示范了送出一封邮件的基本步骤:
例:使用Telnet模拟SMTP对话过程
这个例子示范了如何使用SMTP将上例的那封邮件送到mail.example.com服务器上的SMTP server(在此例中,这是一台Postfix server)。如果想自己实验,黑体字就是你要手工键入的部分。一开始,我们使用telnet连接到的mail.example.com的port 25(这是SMTP server的公认哦、通信端口),接着出现下列信息:
这段信息是telnet自己显示出来的,真正的SMTP对话没有这一段。在telnet连接成功后,出现的是SMTP server的响应信息:
SMTP
server的响应信息有固定格式,一开始必定是三个数字的“响应码”(responsecode)
,接着是一段适合人们解读的简短信息。响应信息代表前次命令的接受状态,对客
户端而言,只有第一个数字有意义。表1整理了各级的响应码与它们对应的意义。
表1 SMTP响应码范围
响应状态码 状态
2xx
请求的动作已成功接受并完成,客户端可以继续下一步。
3xx
命令不接受,因为服务器还需要更多信息。客户端应该以其他命令提供充
足信息。
4xx
暂时性的失败。若客户端下次尝试同样动作,或许有机会成功。
5xx 永久性的失败。客户端不应该继续尝试同样的动作。
-------------------------------------------------------------------
客户端收到欢迎语之后,接着必须使用HELO命令介绍它自己。HELO命令后面必须是客户端自己的完整主机名称:
HELO mail.oreilly.com
服务器端响应成功,让客户端可以继续下一步:
250 mail.oreilly.com
客户端使用MAIL FROM命令表示发信者的邮箱地址:
MAIL FROM:
服务器端表示接受该地址:
250 ok
客户端使用RCPT TO命令指出收件人的邮箱地址:
RCPT TO:
服务器端同意将邮件传递给你指定的收件人:
250 ok
现在,客户端可以开始送出邮件的内容了。DATA命令让服务器端知道客户端要传送封RFC 2822邮件:
DATA
服务器端响应它接收到的DATA命令,并提示如何表示邮件结尾:
354 End data with
这时候,客户端可以开始传送整封电子邮件。请注意,这里说的是“整封”,包括了标头与正文。在客户端送出完整邮件之后,必须依序送出<CR>
服务器表示它已经收到完整邮件:
250 Ok: queued as 5FA26B3DFE
从这时候开始,由服务器端负责将邮件送到目的地。如果客户端还想要执行其他命令,现在就可以开始了。如果已没有其他邮件要寄到此服务器,则应该使用QUIT命令结束对话:
QUIT
接着,服务器便会主动切断连接:
221 Bye
最后, telnet告诉你连接已经中断,并回到命令行环境:
Connection closed by foreign host。