SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,尽管邮件服务器可以用SMTP发送、接收邮件,但是邮件客户端只能用SMTP发送邮件,接收邮件一般用IMAP 或者 POP3 。邮件客户端使用TCP的25号端口与服务器通信。
SMTP在1982年首次被定义在 RFC 821 ,在2008它被更新为扩展的SMTP协议,补充在文件 RFC 5321 ,扩展的协议是目前使用最广泛的协议。
SMTP命令汇总
HELO <SP> <domain> <CRLF>
EHLO <SP> <domain /address-literal > <CRLF> 新标准用于替换 HELO 命令
MAIL <SP> FROM:<reverse-path> <CRLF>
RCPT <SP> TO:<forward-path> <CRLF>
DATA <CRLF>
RSET <CRLF>
SEND <SP> FROM:<reverse-path> <CRLF>
SOML <SP> FROM:<reverse-path> <CRLF>
SAML <SP> FROM:<reverse-path> <CRLF>
VRFY <SP> <string> <CRLF>
EXPN <SP> <string> <CRLF>
HELP [<SP> <string>] <CRLF>
NOOP <CRLF>
QUIT <CRLF>
TURN <CRLF>
命令语义:
SMTP命令由四个不区分大小写的字母组成,如果命令带参数,则用空格与参数隔开,命令用回车换行结尾<CRLF>。
EHLO(Extended hello)or HELO(hello)
这个命令用于说明自己是SMTP客户端身份,参数包含客户端的域名(domain)。其中EHLO是SMTP补充协议( RFC 5321 )中用于替换HELO命令的新命令,协议规定服务器支持EHLO命令的时候,尽量使用EHLO命令,为了兼容以前的版本,要求服务器继续支持HELO命令。如果收到回复OK,说明发送者和接收者处于初始状态,所有的状态表和缓存区都被清零。
这个命令的参数是发送者邮箱<reverse-path>,参数中有 FROM 关键字,这个命令会清空之前的发送者邮箱(the reverse-path buffer)、接收者邮箱(forward-path buffer)和邮件数据(the mail data buffer)。
RCPT (recipient)
用于指定一个邮件接收者,参数中有TO 关键字,指定多个接收者通过重复使用这个命令。
DATA
这个命令没有参数,告诉服务器接着要发送邮件内容。
邮件内容包含邮件标题项(message header section )和邮件正文(message body),
标题项(Header Fields )是以项目名(field name)为行的起点,接着是冒号(":"),跟着是内容(field body)以回车换行结束(CRLF),下面是标题项的例子
From: Bob@example.com
To: Alice@example.com
Cc: theboss@example.com
subject: subject
其中From、To、Cc、subject就是项目名,冒号后是内容。邮件的标题区与正文区需要用一个空行隔开。两者共同组成DATA命令的参数,正文区用只有一个点字符“.”的单行来结束。
SEND
初始化邮件事务,邮件数据被转发到一个或多个终端。
SOML(SEND OR MAIL)
初始化邮件事务,邮件数据被转发到一个或多个终端或邮箱。
SAML(SEND AND MAIL)
初始化邮件事务,邮件数据被转发到一个或多个终端和邮箱。
RSET(RESET)
这个命令用来终止邮件事务(mail transaction),任何已经存储的发送者、接收者、邮件数据(mail data)信息都被丢弃,缓存区被清零。
VRFY(VERIFY)
验证邮箱是否存在,如果参数是用户名,则返回一个全名(如果存在)。
EXPN(EXPAND)
验证邮箱列表
HELP
返回帮助信息,带参数时候,返回指定的帮助信息。
NOOP
这个命令指示服务器收到命令后不用回复 “OK”
QUIT
关闭传输通道。
TURN
交换邮件发送者和接收者的角色,这个命令用在建立连接成本高的时候,TCP连接不用这个命令。这个命令会产生安全问题,只有在服务器可以被授权作为客户端时候才能用。
以上是对SMTP协议指令的讲解,最近在关注“邮件内容安全”,在找一些公开的“邮件加密软件”,PGP用起来太麻烦了,不过找到了另外一个隐秘邮,这是一个免费公开的"邮件内容加密"平台,无论是个人还是企业规模化都可以试用,目前还没有本地版本的,不过从官网上查看资料其是以"邮件加密网关"形式存在的,也不用自己管理密钥,所以还是挺方便安全的。大家如果有更好的可以推荐给我。