SMTP协议简介
最常用的网络服务之一是电子邮件(E-mail)。 电子邮件用于把包含文本、视频或图片的单条报文发送给一个或者多个收件人。 简单邮件传输协议(Simple Mail Transfer Protocol,SMTP)是在因特网中用于电子邮件的标准机制。 SMTP通过使用发送方SMTP和接收方SMTP进程来发送和接收E-mail消息,这些进程执行E-mail的传送和接收服务。 SMTP服务器监听TCP 25号端口,并对客户端发送的合法命令做出响应。详见RFC821、822、1869。邮件传输过程
从发件人到收件人之间的邮件传输过程由三个阶段构成:
第一阶段:电子邮件从用户代理进入本地服务器。邮件并不是直接传送到远程服务器中的,因为远程服务器不能保证始终可用。 所以,邮件在发送前会一直保存在本地服务器中。用户代理使用SMTP客户端软件,而本地服务器使用SMTP服务器软件。
第二阶段:电子邮件由本地服务器中继传递。 在这一阶段,远程服务器作为SMTP服务器,而本地服务器作为SMTP客户端。 电子邮件分发给远程服务器,而不是远程用户代理。 原因是SMTP报文必须由始终处于运行状态的服务器接收,服务器必须不间断运行的原因是由于邮件可能随时到达。 然而,人们经常在一天的工作结束时关闭计算机, 所以,通常情况下,组织机构会分派一台计算机作为邮件服务器,运行SMTP服务器程序。 电子邮件由这台邮件服务器接收,存储在用户的邮箱中,便于以后检索。
第三阶段:远程用户代理使用邮件访问协议,如POP3或者IMAP,来访问邮箱并获取邮件。
SMTP命令 | 作 用 |
HELO | 用于开始会话,通常在HELO后跟客户机的主机名(hostname) |
MAIL | 用于指出发起会话的发件人,通常在MAIL后面跟From参数来指定发件人 |
RCPT | 用于指定该消息的接收人,通常在RCPT后面跟To参数来指定收件人 |
SMTP标准命令
DATA | 表示客户端开始向服务器端发送消息(邮件) 正文 |
RSET | 放弃当前的数据传输 |
VRFY | 用以确定指定的收件人在服务器端是合法的(在发送邮件正文之前确定邮箱存在), 考虑到这个功能有一定的安全隐患,此命令在Exchange中不被支持,SMTP服务器总是返回“非法地址” |
TURN | 交换客户端和服务器角色,允许客户端触发服务器端的邮件传送(此命令也很少被使用) |
EHLO(扩展) | 作为标准HELO的替代者,客户端发送EHLO来跟服务器确定其对ESMTP的支持程度, 服务器会返回一个它所支持的ESMTP命令字列表给客户端。 |
ATRN(扩展) | TURN命令的增强,在启用TURN之前需要身份认证。 |
ETRN(扩展) | TURN命令的增强,功能上与TURN类似,但是通过创建另外一个独立的会话完成TURN报文传送。 |
Pipelining(扩展) | 允许SMTP客户端在服务器响应之前以异步的方式连续发送若干的命令字。 例如,可以在获得服务器确认之前,连续发送多个RCPT命令字,这样可以实现在慢速网络上的高效通信。 |
BDAT(扩展) | 此命令字替代DATA,允许客户端采用批量的方式传送消息报文,可以在一定程度上降低接收方的负载。 |
AUTH(扩展) | 允许客户端使用基本验证、Windows集成验证(NTLM和Kerberos)与服务器进行身份认证, 进行身份认证也是避免SMTP服务器被relay的重要手段。 |
STARTTLS(扩展) | 用来表示客户端希望能够与服务器建立一个基于TLS的加密会话。 |
XEXCH50(扩展) | 用以传送Exchange服务器间专用的报头数据。 |
SMTP会话过程
SMTP在TCP协议25号端口监听连接请求,建立TCP连接后,客户端发送HELO命令以标识发件人自己的身份。 然后客户端发送MAIL命令服务器端正希望以OK作为响应,表明准备接收。 客户端发送RCPT命令,以标识该电子邮件的计划接收人,可以有多个RCPT行,服务器端则表示是否愿意为收件人接受邮件。 协商结束,发送邮件,用命令DATA发送,以.表示结束输入内容一起发送出去。 结束此次发送,用QUIT命令退出。
POP3/IMAP简介
如果我们把SMTP说成是一个推协议的话(即使收件人不愿意接收消息, 它也要将这一消息从发件人一端推送到收件人一端,它是由发件人发起的,而不是由收件人发起的), 那么POP3/IMAP就是一个拉协议,操作由收件人发起。邮件必须在收件人检索之前一直保存在邮件服务器的邮箱中。 目前有两种邮局协议可用:邮局协议版本3(Post Office Protocol,version 3,POP3)和因特网邮件访问协议版本4(Internet Mail Access Protocol, version 4, IMAP4)。 POP3监听端口为TCP 110;IMAP监听端口为TCP 143。
POP3命令 | 参 数 | 状 态 | 描 述 |
USER | username | 认可 | 用户 |
PASS | password | 认可 | 密码 |
APOP | Name,Digest | 认可 | Digest是MD5消息摘要 |
STAT | None | 处 理 | 请求服务器发回关于邮箱的统计资料,如邮件总数和总字节数 |
UIDL | [Msg#] | 处 理 | 返回邮件的唯一标识符,POP3会话的每个标识符都将是唯一的 |
LIST | [Msg#] | 处 理 | 返回邮件数量和每个邮件的大小 |
RETR | [Msg#] | 处 理 | 返回由参数标识的邮件的全部文本 |
DELE | [Msg#] | 处 理 | 服务器将由参数标识的邮件标记为删除,由quit命令执行 |
RSET | None | 处 理 | 服务器将重置所有标记为删除的邮件,用于撤消DELE命令 |
TOP | [Msg#] | 处 理 | 服务器将返回由参数标识的邮件前n行内容 |
NOOP | None | 处 理 | 服务器返回一个肯定的应答 |
QUIT | None | 更 新 | 退出操作 |
POP3会话过程
POP3客户向POP3服务器发送命令并等待响应,POP3命令采用命令行形式,用ASCII码表示。 服务器响应是由一个单独的命令行组成,或多个命令行组成,响应第一行以ASCII文本+OK或-ERR指出相应的操作状态是成功还是失败。
在POP3协议中有三种状态,认可状态,处理状态,和更新状态。 当客户机与服务器建立联系时,一旦客户机提供了自己身份并成功确认,即由认可状态转入处理状态, 在完成相应的操作后客户机发出quit命令,则进入更新状态,更新之后最后重返认可状态。
常用IMAP命令
IMAP协议中的命令与POP3中最大的不同是每条命令前都一有一个由Client指定的标签, 同一个会话中,Client发出的每条命令都会有不同的标签;而Server对每个Client发出的命令都必须以相同的标签作应答。 这就使得IMAP会话中Client可以同时送出多个命令,而Server则完全可以并发处理这些命令,不必等待上一个命令执行完毕才处理下一个。
标 签 | 命 令 | 参 数 | 描 述 |
TAG | LOGIN | username password | 用于登录IMAP服务器,与POP3显著不同的是用户名和口令同时作为参数提交给Server, 而POP3完成同样的操作需要USER和PASS两条命令。 |
TAG | CREATE | folder | 可以创建指定名字的文件夹。文件夹名字通常是带路径的文件夹全名。 |
TAG | DELETE | folder | 删除指定名字的文件夹。文件夹名字通常是带路径的文件夹全名。 |
TAG | RENAME | oldfolder newfolder | 修改文件夹的名称。 |
TAG | LIST | BASE template | 用于列出邮箱中已有的文件夹,有点像操作系统的列目录命令。 这个命令可以包含起始的路径位置和需要列出的文件夹所符合的特征。 |
TAG | APPEND | folder attributes size mail data | 允许Client上载一个邮件到指定的Folder中。命令中包含了新邮件的属性、大小,随后是邮件数据。 |
TAG | SELECT | folder | 让Client选定某个Folder,表示即将对该Folder内的邮件作操作。 |
TAG | FETCH | ... | FETCH命令是IMAP协议里最复杂的命令。FETCH的命令参数很多、很复杂,难以一一列举, 但基本的特征是允许将邮件按照MIME结构拆解为零碎的部件来提取。 例如,可以利用FETCH命令提取邮件头、某一个附件、或某一邮件附件头部的某一字段,等等。 |
TAG | STORE | mail id | 用于修改指定邮件的属性,包括给邮件打上已读标记、删除标记,等等。 |
TAG | CLOSE | - | 表示Client结束对当前Folder的访问,随后可以SELECT另一Folder。 |
TAG | EXPUNGE | - | 邮箱中所有打了删除标记的邮件彻底删除。EXPUNGE删除的邮件将不可以恢复。 |
TAG | LOGOUT | - | 结束本次IMAP会话。 |
IMAP会话过程
IMAP会话过程首先是用户代理(客户)发起建立一个到IMAP服务器(服务器)端口号143的TCP连接,然后是服务器返回初始问候消息, 接着就是客户和服务器之间的交互了。 客户和服务器的交互与POP3的类似,不过要丰富些,由客户发出的命令、服务器返回的数据或命令完成结果响应构成。IMAP服务器在会话期间总是处于以下4个状态之一:未认证(nonauthenticated)、已认证(authenticated)、已选择(selected)和注销(1ogout)。未认证状态是连接刚建立时的初始状态,这种状态下,用户必须提供一个用户名和口令对才能发出更多的命令。在已认证状态下,用户必须选择一个邮件夹才能发出作用于邮件消息的命令。在已选择状态下,用户可以发出作用于邮件消息的任何命令(获取、转移、删除、获取多部分消息的某个部分,等等)。最后的注销状态是会话即将终止时的状态。
POP3与IMAP区别
POP3提供了快捷的邮件下载服务,用户可以利用POP3把邮箱里的信下载到PCh上进行离线阅读。 一旦邮件进入PC的本地硬盘,就可以选择把邮件从服务器上删除,然后脱离Internet的连接并选择在任何时候阅读已经下载的邮件。
IMAP同样提供了方便的邮件下载服务,让用户服务能进行离线阅读,但IMAP能完成的却远远不只这些。 首先,IMAP提供的摘要浏览功能可以让你阅读完所有的邮件到达时间、主题、发件人、大小等信息后才作出是否下载的决定。 也就是说,你不必等所有的邮件都下载完毕后才知道空间邮件里都有些什么。 如果你根据摘要信息就可以决定某些邮件对你毫无用处,你就可以直接在服务器上把这些邮件删除掉,而不必浪费你宝贵的上网时间。
如果你的IMAP客户端软件完整支持IMAP4rev1的话(如Netscape4.5), 则你还可以享受选择性下载附件的服务。举例来说,假如一封邮件里含有大大小小共5个附件,而其中只有2个附件是你需要的, 你就可以只下载那两个附件,节省了下载其余3个的时间。
电邮地址的格式如下:
电邮地址的格式是用户名@域名。电子邮件地址是表示在某部主机上的一个使用者帐号,电邮地址不是身份。