SMTP协议备注

【参考资料】
【1】https://tools.ietf.org/html/rfc5321
【2】《TCP/IP 技术详解 卷一》
【3】https://blog.csdn.net/sinat_36219858/article/details/71069515
【4】https://baike.baidu.com/item/SMTP/175887?fr=aladdin

一 基本概念
  1. 客户端通过向SMTP服务器“推”待发送邮件来实现邮件发送
  2. SMTP基于TCP协议,默认采用端口25
  3. 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

猜你喜欢

转载自blog.csdn.net/Fredric_2014/article/details/84497393