SMTP 协议

发布时间 2023-12-14 10:08:31作者: 张小志

SMTP 是简单传输协议(Simple Mail Transfer Protocol) 的缩写,它是用于在网络上传输邮件的一种协议。SMTP 协议是目前互联网上主要用来发送邮件的协议之一,其设计目的是使发送邮件的过程尽可能的简单,从而使大多数计算机系统都能支持。

    SMTP 协议的几重要概念和功能:

  1. 邮件传输代理
  2. 邮件队列,邮件服务按一定规则顺序将邮件排列入队,即使在网络中断等待发送的邮件也不会丢失
  3. 邮件认证,邮件服务器通过验证AUTH 命令的身份信息确定用户是否合法,主要验证方式有PLAIN、LOGIN、CRAM-MD5、OAuth等
  4. 邮件转发和中继,SMTP 协议允许邮件服务器转发邮件到其他的邮件服务器,在实际部署使用场景中有些服务器是不是能直接与要发送的目标邮件服务器直接通信,此时蹭的转发和中继就很重要

SMTP 命令

EHLO {s}

连接建立成功后,服务器会立即发出问候220 xxx Server Ready 之类的用语,以220 开关。客户端在收到问候信息时应该发出EHLO 来询问服务支持的扩展,与之相关系还有HELO命令,现在大多主流的邮件服务器已经不再支持了。命令中的{s}是客户端表明自己的身份的标识,以便后面安全服务来验证来源的合法性。邮件服务返回250 xxx表明服务器接受了命令

STARTTLS

在一些旧的客户端中还会存在着一些非TLS的连接,这些连接如果在连接建立后还要实现TLS通信那么就该使用该命令来完成TLS的过程,邮件服务返回250 xxx表明服务器接受了命令

AUTH

授权命令,主要介绍两种常的授权验证方式

  1. PLAIN <mail-parameters> "<pass>"        一组用户名/邮箱及密码的Base64字符串。
  2. LOGIN

    LOGIN 方式有点特殊,邮件服务器在收到LOING后通过 334 xxx来告诉客户端发送用户名/邮箱及密码操作

MAIL FROM: <reverse-path> [SP <mail-parameters>]

该命令是表明发送邮件的发件的邮箱信息,目前一些主流的邮件服器还会再加一组Size 表示邮件数据的大小(byte),邮件服务返回250 xxx表明服务器接受了命令

RCPT TO: <forward-path> [SP <RCPT-parameters>]

该命令是指明邮件要发送到哪些目标邮箱,该命令客户端连接可能多次调用。邮件服务返回250 xxx表明服务器接受了命令

DATA

邮件服务器在接收到该命令后,在完成接收邮件数据准备就绪后要,返回 354 xxx 表明已经就绪

客户再发出邮件数据,邮件数据以<CRLF>.<CRLF>结尾表示完成数据的发送

邮件服务返回250 xxx表明服务器接收邮件数据完成

REST

重置当前连接的所有信息,表明客户端要重新发起新的发送邮件。原则上一次连接只发送一份邮件数据,主流邮件服务器会在接收完成DATA后主动自动断开当前连接。但如果服务器允许支持的,也可以通过该命令在调用QUIT之前再次发送邮件。

NOOP

连接心跳命令,防止连接断开

QUIT

客户完成邮件发送任务可以通过QUIT命令,表明已经完成邮件发送工作,服务器会自动断开当前连接