电子邮件服务之电子邮件协议

384 阅读4分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第5天,点击查看活动详情

电子邮件服务模型中的客户称为邮件用户代理(MUA),主要用于编辑和发送邮件,以及从服务器中下载、管理、阅读邮件等。

提供送信功能的服务器称为邮件传输代理(MTA),MTA也提供邮件存储功能。

提供收信功能的服务器称为邮件投递代理(MDA),MDA主要负责将MTA接受的邮件投递到收件人的邮箱中。

image-20220615190735252

电子邮件服务器传递信件过程的行为:

  1. 接受用户投递的邮件
  2. 将用户投递的邮件转发给其他邮件服务器
  3. 接收其他邮件服务区转投的信件,并将邮件存储到自身管理的用户邮箱中
  4. 为发起读信请求的用户提供读取服务

电子邮件协议

常用的电子邮件协议:

  • SMTP:常用于发送邮件
  • POP3:常用于接收邮件
  • IMAP4:常用于接收邮件

IMAP4比POP3强大,但也要占用更多资源,所以大多数站点使用SMTP搭配POP3搭建邮件服务器。

SMTP协议

SMTP即简单邮件传输协议,属于TCP/IP协议簇。能跨越网络传输邮件,即实现“SMTP邮件中继”。

SMTP两种工作模式:

  • 电子邮件从客户端传到服务器
  • 电子邮件在两台SMTP服务器之间传递

image-20220615190835115

例如,SMTP服务器mail.test.com收到一封发送到chan@163.com的邮件,则其工作流程如下:

  • SMTP服务器获取收件方域名与自身域名进行比较,发现不一致
  • SMTP服务器请求DNS服务器查找163.com的MX记录并获取相应的远端SMTP服务器IP地址
  • SMTP服务器根据获得的IP地址将邮件转发给远端SMTP服务器

客户端向服务器发送邮件过程:

  • 客户端向服务器发送连接请求,建立TCP连接
  • 客户端发送helo/chlo命令表明自己身份
  • 客户端发送mail from命令设置发件人邮箱地址
  • 客户端发送rcpt to命令声明收件人地址
  • 客户端使用data命令,并输入正文内容,输入完毕以“.”表示输入结束
  • 结束此次发送,用quit命令退出

常用的SMTP命令如下:

命令说明
helo/ehlo 客户端主机名向服务器表明自己的身份
mail from: 发件人邮箱设置发件人身份
rcpt to: 收件人邮箱设置收件人邮箱地址,若需将邮件发送给多人,可重复使用此命令
data使用此命令,开始输入邮件正文,以“ . ”结束正文输入
vrfy 邮箱地址验证指定邮箱是否存在,考虑到安全问题,此命令一般禁用
noop空操作,要求服务器返回OK应答,一般用作测试
rset重置会话,取消当前传输

客户端向SMTP服务器发送命令后总会收到来自服务器的响应码:

响应码说明
220服务器就绪
250要求的邮箱操作完成
354开始邮件输入,以“ . ”结束
450要求的邮件操作未完成,邮箱不可用
452系统存储不足,要求的操作未执行
454临时认证失败,可能账号被临时冻结
550要求的邮件操作未完成,邮箱不可用

POP3协议

POP3即邮局协议第3版,属于TCP/IP协议簇,主要用于查收邮件。POP3支持离线邮件处理,当邮件递达服务器后,邮件客户端可下载所有未阅读的电子邮件。POP3默认使用110号端口,工作流程如下:

  • 客户端向服务器发起连接请求,连接到110端口
  • 连接成功后客户端使用user命令表明收件人身份,使用pass命令进行用户认证
  • 认证成功后客户端使用list命令查看POP3服务器中的邮件列表,再使用rert命令查看邮件内容
  • 查看完毕,使用quit命令退出客户端,关闭连接

用户若想通过POP3服务器收取信件,必须先通过身份认证,只有认证成功的用户才可以使用POP3服务器提供的功能。

POP3常用的命令如下:

命令说明
user 用户名表明收件人身份
pass 密码验证收件人身份
stat查看邮件服务器的邮件状态,包括邮件的数量与大小
list显示邮件服务器中的邮件列表,包括邮件的数量与每封邮件的大小
uidl查看邮件服务器中的邮件数量与每封邮件的唯一标识符
retr [msg#]显示指定邮件的内容,其中[msg#]表示邮件编号
dele [msg#]标记邮件为已删除
rset重置所有标记为删除的邮件
noop空操作,一般用检测服务器连接状态
quit退出

POP3服务器也会返回响应信息,“+OK”表示命令执行成功,“-ERR”表示失败。