邮箱基础协议:SMTP/POP3/IMAP
目录
-
信封(envelope)
信封是 MTA 用来交付的,在上例中由两个 SMTP 命令指明;
MAIL From: rstevens@sun.tuc.noao.edu
RCPT To: estevens@noao.edu -
首部(header)
首部由用户代理使用,上例中可以看到 9 个首部字段:Recived、Message-Id、From、Date、Reply-To、X-Phone、X-Mailer、To 和 Subject
(以 X- 开头的是用户定义的字段,其他是由 RFC 822 定义的,详见 4.1 节) -
正文(body)
正文是发送用户发给接收用户报文的内容,用 TCP 进行的邮件交换是由报文传送代理 MTA(Message Transfer Agent)完成的。
TCP/IP 交换电子邮件示意图:邮件基础协议
邮件基础的网络协议有以下三个,一般我们使用 SMTP 协议来发送邮件,POP3 和 IMAP 协议来接收邮件(从服务端接收邮件至客户端)
- 下表中 IMAP 协议支持发送邮件并不是邮件投递,而是通过 append 指令将邮件从客户端上传到服务端
协议 工作端口(括号内为 SSL) 支持发送邮件 支持接收邮件 SMTP 25(465) True False POP3 110(995) False True IMAP 143(993) True True SMTP
两个 MTA 之间通过 NVT ASCII 进行通信,客户向服务器发出命令,服务器用数字应答码和可选的人可读字符串进行响应
下图是 SMTP 的一个交互会话过程:
- 键入 mail -v 启动用户代理; 键入 subject(主题)和正文
- 主动打开 port:25 ;等待从 Server 返回的问候报文(应答码220)
- HELO:标识自己(参数必须是合格的主机名)
- MAIL:标识报文发起人
- RCPT:标识接收方(可发多次,标识多个接收方)
- DATA:邮件报文内容
- QUIT:结束邮件交换
下图是发送方 SMTP(Client)和接收方 SMTP(Server)之间的一个 SMTP 连接:
SMTP 指令
最小SMTP支持 8 个命令,除了上述 5 个命令还有:
- RSET:异常中止当前的邮件事务并使两端复位。丢掉所有有关发送方、接收方或邮件的存储信息
- VRFY:使客户询问发送方以验证接收方地址,而无需向发送方发送邮件(通常用与管理员查找邮件交付差错中使用)
- NOOP:强迫服务器响应一个OK应答码(200)
(另外还有一些附加可选命令)
SMTP 用半双工的形式使用 TCP,客户发送一个命令后停止等待应答;实际上 Client 可以一次发多个命令,称为流水线技术(pipelining)如果使用了这种技术,Client 则不能丢弃报文直到所有的应答都已检查过,确认报文被服务器接收了
使用 Telnet 模拟 SMTP 发送邮件
POP3
POP3 协议相对 SMTP/IMAP 要简单一些,协议的指令也不多
POP3 的生命周期
-