Loading... > 参考文献 [RFC 5321](https://www.rfc-editor.org/rfc/rfc5321.txt "https://www.rfc-editor.org/rfc/rfc5321.txt") #### SMTP基本结构 SMTP设计如下图所示: ``` +----------+ +----------+ +------+ | | | | | User |<-->| | SMTP | | +------+ | Client- |Commands/Replies| Server- | +------+ | SMTP |<-------------->| SMTP | +------+ | File |<-->| | and Mail | |<-->| File | |System| | | | | |System| +------+ +----------+ +----------+ +------+ SMTP client SMTP server ``` 当SMTP客户端有消息需要传输,它就会向SMTP服务器建立一个双向传输通道。SMTP客户端的责任是传输邮件消息给一个或多个SMTP服务器,或者报告它未能这样做。 SMTP扩展 RFC821完成后,从1990年后开始,经过10年努力,此协议被“服务扩展”模型改进,允许客户端和服务器同意利用超出原来SMTP需求的共享功能。当代SMTP实现必须支持基本的扩展机制。例如,服务器必须支持EHLO命令。 #### SMTP命令 **HELO** 向服务器标识用户身份。发送者能欺骗,说谎。 **EHLO** 向服务器标识用户身份。发送者能欺骗,说谎。 **AUTH LOGIN** 向服务器表明进行身份验证 **MAIL FROM** 命令中指定的地址是发件人地址 **RCPT TO** 标识单个的邮件接收人;可有多个 RCPT TO;常在 MAIL 命令后面。 **DATA** 在单个或多个 RCPT 命令后,表示所有的邮件接收人已标识,并初始化数据传输,以 CRLF.CRLF 结束 **VRFY** 用于验证指定的用户/邮箱是否存在;由于安全方面的原因,服务器常禁止此命令 **EXPN** 验证给定的邮箱列表是否存在,扩充邮箱列表,也常被禁用 **HELP** 查询服务器支持什么命令 **NOOP** 无操作,服务器应响应 OK **RSET** 重置会话,当前传输被取消 **QUIT** 结束会话 #### SMTP命令发邮件 > 注意:字符输入的时候不能使用“backspace删除键”,每个字符敲入后就已经传到服务器。如果输入错误,回车等待错误信息反馈,然后重新输入刚才修正后的命令。 红框内的为命令,含有DATA命令的大红框是整个正文的内容。正文的时候,subject命令结束后,下面空一行进行正文输入。正文输入完成后,回车,新行输入一个因为的“.”再回车,服务器识别为正文输入结束。服务器会反馈信息。 ![a.png](https://www.wsczx.com:4443/zb_users/upload/2016/05/201605051462453399137311.png) #### SMTP抓包分析 SMTP匿名发送 ![b.png](https://www.wsczx.com:4443/zb_users/upload/2016/05/201605051462453420877851.png) 2232 首先是建立连接 2233 EHLO命令向服务器发起请求 2342 服务器向回复EHLO,表示请求完成 2343 MAIL FROM命令说明发件邮箱 2447 服务器回复命令执行成功 2448 TCPT TO命令声明收件邮箱地址 2559 服务器反馈命令执行成功 2560 DATA命令说明下面开始书写正文 2682 服务器表示开始接收书写的正文,以<CRLF>.<CRLF>结束 3097 QUIT命令通知服务器关闭传输通道。 3099 服务器反馈关闭信息。 ##### SMTP账号密码认证发送 ![c.png](https://www.wsczx.com:4443/zb_users/upload/2016/05/201605051462453442540589.png) 2633 首先是建立连接 2634 EHLO命令向服务器发起声明,需要身份验证。 2635 服务器的回复EHLO,250表示请求完成 2636 AUTH LOGIN用此命令表示身份验证开始 2637 服务器返回base64编码过的“user” 2638 发送USER,编码过的用户名 2639 服务器反馈base64编码过的“pass” 2640 发送PASS,编码过的密码 2641 认证成功 2642 MAIL FROM声明邮件来源的地址 2643 服务器返回发送器正常 2644 声明目的邮件地址是 2645 接受者OK 2646 DATA声明邮件的内容开始 2647 服务器返回信息,内容输入开始。354表示开始邮件,以<CRLF>.<CRLF>结束(即\\r \\n . \\r \\n) 2648~2651 都是邮件正文 2653 2686 2687 退出连接 2688 服务器反馈传输通道关闭的信息 Last modification:June 14, 2022 © Allow specification reprint Support Appreciate the author AliPayWeChat Like 0 如果觉得我的文章对你有用,请随意赞赏