SMTP被用来在因特网上传递电子邮件,RFC821规定了该协议的所有细节,但是你只须记住该协议的基本命令和方法就行了。协议的原理很简单,无非是一个客户端计算机向服务器发送命令,然后服务器向客户端计算机返回一些信息。客户端发送的命令以及服务器的回应都是字符串,所以不需要特别的软件就能读出它们。SMTP协议共包含10个SMTP命令,列表如下:
SMTP命令命令说明
HELLO<domain><CRLF>识别发送方到接收SMTP的一个HELLO命令
MAILFROM:<reverse-path><CRLF><reverse-path>为发送者地址。此命令告诉接收方一个新邮件发送的开始,并对所有的状态和缓冲区进行初始化。此命令开始一个邮件传输处理,最终完成将邮件数据传送到一个或多个邮箱中。
RCPTTO:<forward-path><CRLF><forward-path>标识各个邮件接收者的地址
DATA<CRLF>
接收SMTP将把其后的行为看作邮件数据去处理,以<CRLF>.<CRLF>标识数据的结尾。
REST<CRLF>退出/复位当前的邮件传输
NOOP<CRLF>要求接收SMTP仅做OK应答。(用于测试)
QUIT<CRLF>要求接收SMTP返回一个OK应答并关闭传输。
VRFY<string><CRLF>验证指定的邮箱是否存在,由于安全因素,服务器多禁止此命令。
EXPN<string><CRLF>验证给定的邮箱列表是否存在,扩充邮箱列表,也常禁止使用。
HELP<CRLF>查询服务器支持什么命令
注:<CRLF>为回车、换行,ASCII码分别为13、10(十进制)。
SMTP协议的每一个命令都会返回一个应答码,应答码的每一个数字都是有特定含义的,如第一位数字为2时表示命令成功;为5表失败;3表没有完成。一些
较复杂的邮件程序利用该特点,首先检查应答码的首数字,并根据其值来决定下一步的动作。下面将SMTP的应答码列表如下:
应答码说明
501参数格式错误
502命令不可实现
503错误的命令序列
504命令参数不可实现
211系统状态或系统帮助响应
214帮助信息
220<domain>服务就绪
221<domain>服务关闭
421<domain>服务未就绪,关闭传输信道
250要求的邮件操作完成
251用户非本地,将转发向<forward-path>
450要求的邮件操作未完成,邮箱不可用
550要求的邮件操作未完成,邮箱不可用
451放弃要求的操作;处理过程中出错
551用户非本地,请尝试<forward-path>
452系统存储不足,要求的操作未执行
552过量的存储分配,要求的操作未执行
553邮箱名不可用,要求的操作未执行
354开始邮件输入,以"."结束
554操作失败
示例:
telnet 172.16.10.250 25 --------------------使用 telnet 命令连接服务器 25 端口
Trying 172.16.10.250 ... ---------------------正在连接服务器 25 端口
Connected to 172.16.10.250 . -------------连接服务器 25 端口成功
helo askcuix ----------------------------------- 向服务器标识用户身份,该命令包含一个参数,即你的邮箱名。在RFC821中,HELO是一个可选择性命令,如果服务器不要求该命令的话,你可以把它忽略掉。
250 askcuix
mail from: <askcuix@domain.com> --------用mail from命令告诉服务器你想发一封邮件,该命令以发信人的邮件地址为参数。
250 ok -------------------------------------------命令执行成功
rcpt to: <test@domain.com> ----------------该命令以收信人地址为参数,告诉服务器你想将邮件发到收信人地址处。如果你想将邮件发给多个收件人的话。你需要多次使用RCPTTO命令,对每个命令,服务器都会返回代码为250的回应。
250 ok -------------------------------------------命令执行成功
data --------------------------------------------- 数据传输初始化。用DATA命令告诉服务器以下的内容为邮件正文。在你从服务器收到代码为354的回应后,你就可以发送邮件正文了。
354 go ahead --------------------------------- 开始传输数据。邮件按行发送,每行邮件以一个无回车的换行符结束。
From: askcuix@domain.com
To: test@domain.com
Date: Mon, 25 May 2008 14:24:27 +0800
Subject: test mail
Hi, test
This is a test mail, you don't reply it.
.
----------------------------------------------------数据内容,包括BASE64加密后的邮件内容, 以 CRLF.CRLF 结束数据传输。服务器收到这个标志后,就会立即向你返回一个代码为250的回应以及该邮件的唯一ID号。
250 ok message accepted for delivery ----命令执行成功
quit ---------------------------------------------- 结束会话,也可以继续发下一封邮件。
221 Ok,close
Connection closed by foreign host .-------- 断开连接
分享到:
相关推荐
POP&SMTP 学习笔记 MIME TYPE rfc1939--POP3 RFC2045( Mutipurpose Internet Mail Extensions(MIME) Part One telnet操作 smtp pop
smtp发送邮件源码例子,例子中使用了base64加密。比较简单易懂,适合初学者学习smtp的流程。
使用smtp发送邮件的示例代码,可以拿来参考学习。
个人认为很不错的资源,对学习网络编程很有帮助,对于一些编程高手来说也是不错的源代码
一个简单的SMTP邮件发送程序,想学习原理的可以看下.
通过一学期《TCP/IP协议与网络编程》课程的理论学习,本着“理论联系实际,用理论指导实践”的学习方法,为了提高了同学间的团队精神,特成立兴趣小组(五人),并且选择简单邮件传输协议这一模块,进行理论上的总结...
smtp协议发送邮件的c++源码,可以作为邮件发送协议学习的参考。
主要介绍了Python使用POP3和SMTP协议收发邮件的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
一个完整的运用smtp编写的邮件发送程序, C++编写,对学习协议,以及c++有十分的好处
一个简单的SMTP邮件发送程序,想学习原理的可以看下.
此文件为基于SMTP简单传输协议的邮件传送程序,里面附有源码,值得大家学习的
一个使用windows socket实现的简单smtp客户端,可以实现简单的邮件发送功能,不支持附件,有兴趣的可以自己加。这只是我平时学习的测试程序,还请各位多加指点。
详细介绍了SMTP和POP3发送邮件和接收邮件并有源代码,可用于学习,也可直接用在自己的项目中去
一个smtp简单邮件发送程序,对于学习网络编程的人员很有帮助
反垃圾邮件SMTP代理(ASSP)服务器项目旨在创建一个独立于开源平台的SMTP代理服务器,该服务器实现自动白名单,自学习的隐马尔可夫模型和/或贝叶斯,灰名单,DNSBL,DNSBL,URIBL,SPF ,SRS,反向散射,病毒扫描,...
使用javaApplet编写的smtp协议接受邮件软件!初学者有很多可以学习的地方!
基于SMTP 的邮件截获与还原技术研究.pdf IMAP命令学习.doc pop3 smtp 指令.txt RFC3501中英文
基于SMTP的JAVA邮件基于websocket和java的多人聊天室发送程序
SMTP服务命令.doc,特别适合学习写服务器的初学者,命令很详细,很利于协议的解析。