SMTP协议备注
【参考资料】
【1】https://tools.ietf.org/html/rfc5321
【2】《TCP/IP 技术详解 卷一》
【3】https://blog.****.net/sinat_36219858/article/details/71069515
【4】https://baike.baidu.com/item/SMTP/175887?fr=aladdin
一 基本概念
- 客户端通过向SMTP服务器“推”待发送邮件来实现邮件发送
- SMTP基于TCP协议,默认采用端口25
- SMTP采用SMTP-AUTH扩展来实现身份的认证
二 最基本流程
SMTP最基本的业务流程如下图,具体命令参考第三部分;分别涉及HELO、MAIL FROM、RCPT TO、DATA和QUIT。
三 主要命令
备注: 下面例子中的表述规则 代表 空格 代表 回车换行
2.1 HELLO(HELO)
参数: 代表客户端机器的域名
功能: 用以唯一标识SMTP客户端,在SMTP新的补充协议中试用EHLO命令
例子:
HELO
2.2 MAIL
参数: Reverse-path填写一个邮件地址[email protected],若出错则发送错误邮件至该地址,该值允许为空
功能: 开启一个新的邮件事务,该命令触发清空相关缓存,如邮件数据缓存、发送目的地址缓存等
例子:
“MAIL FROM:” Reverse-path
2.3 RECIPIENT (RCPT)
参数: 目的地邮箱
功能: 提供邮件接收人地址,服务端要返回这些地址是否允许接受邮件
例子:
MAIL FROM:[email protected]
RCPT TO:[email protected]
2.4 DATA
参数: 无
功能: 发送邮件正文内容
例子:
当发送端发送DATA命令时,服务端返回354,认为之后收到的数据就是邮件正文,当发送端发送两个CRLF时,服务端认为邮件数据发送结束,返回250
S:“DATA”
R:354
S:“XXXX邮件内容”
S:
R:250 OK
2.5 RESET (RSET)
参数:无
功能: 当前邮件事务将被中止,服务端存储的邮件发送方、邮件数据都将被抛弃
例子:
“RSET” CRLF
2.6 VERIFY (VRFY)
参数:无
功能: 验证用户或者邮箱是否存在
例子:
“VRFY” SP String CRLF
2.7 EXPAND (EXPN)
参数:无
功能: 验证邮箱列表
例子:
“EXPN” SP String CRLF
2.8 QUIT
参数:无
功能: 结束邮件发送会话
例子:
“QUIT” CRLF