最开始的邮件传输是根据 SMTP 实现的,但由于历史原因,Internet 上的很多网关只能传输 7bit 字符。所以出现了对邮件内容编码的需要。这样,在邮件协议中除了 SMTP、POP 外,又增加了与编码相关的 MIME。
概括地说,SMTP、POP 与邮件的接收、发送过程相关,这两者负责邮件的传输;而 MIME 与邮件内容(这里的邮件内容包括发件人信息、收件人/抄送人信息、邮件正文、附件)相关,约定了被传输邮件的格式。
可以这样理解,SMTP、POP 完成了邮差的工作,MIME 解决了信件(包括信封)格式的问题。没有 MIME 之前,邮差只能给美国人送邮件;有了 MIME 之后,邮差可以提供国际快递业务了。
常见邮件协议
SMTP
简单邮件传输协议(Simple Mail Transfer Protocol),使用 TCP 25 端口,加密时使用 TCP 465 端口。
SMTP 定义了邮件客户端与SMTP服务器之间,以及两台 SMTP 服务器之间发送邮件的通信规则 。SMTP 协议属于 TCP/IP 协议族,通信双方采用一问一答的命令/响应形式进行对话,且定了对话的规则和所有命令/响应的语法格式。
它已是事实上的 eMail 传输的标准。
POP3
邮局协议版本 3(Post Office Protocol - Version 3),使用 TCP 110 端口,加密时使用 TCP 995 端口。
邮件服务提供商专门为每个用户申请的电子邮箱提供了专门的邮件存储空间,SMTP 服务器将接收到的电子邮件保存到相应用户的电子邮箱中。用户要从邮件服务提供商提供的电子邮箱中获取自己的电子邮件,就需要通过邮件服务提供商的 POP3 邮件服务器来帮助完成。POP3 协议定义了邮件客户端程序与 POP3 服务器进行通信的具体规则和细节。
IMAP4
交互式数据消息访问协议 4(Internet Message Access Protocol 4),使用 TCP 143 端口,加密时使用 993 端口。
与 POP3 协议一样也是规定个人计算机如何访问互联网上的邮件服务器进行收发邮件的协议。是对 POP3 协议的一种扩展,它定义了更为强大的邮件接收功能。
MIME
多用途 Internet 邮件扩展(Multipurpose Internet Mail Extension)
早期人们在使用电子邮件时,都是使用普通文本内容的电子邮件内容进行交流。以往的邮件发送协议中定义只能发送文本信息,无法发送非文本的邮件。针对这个问题,人们后来专门为此定义了 MIME 协议。
从编码方式来说,MIME 定义了两种编码方法 Base64 与 QP(Quote-Printable)。可以表达多段平行的文本内容和非文本的邮件内容,例如在邮件体中内嵌的图像数据和邮件附件等。
Base64
简称 B
原理是把三个 Byte 的数据用 4 个 Byte 表示,在这四个 Byte 中,实际用到的都只有前面 6bit,这样就不存在只能传输 7bit 的字符的问题了。
输入的字符串或一段数据编码成只含有 {‘A’-‘Z’, ‘a’-‘z’, ‘0’-‘9’, ‘+’, ‘/’} 这64个字符的串。
我第一次接触这个编码是在去年编写网站时,用 base64 在前端显示验证码的图片。之后才发现,原来一直使用的 360 浏览器保存的 mhtml 中的图片就是用 base64 编码保存图片的。
QP(Quote-Printable)
简称 Q
原理是把一个 8bit 的字符用两个 16 进制数值表示,然后在前面加 “=”。要求编码后每行不能超过 76 个字符,超过这个限制使用软件换行。用 ”=” 表示编码行的断行,后接 CRLF(76 的限制也包括 ”=”)。
邮件系统组成
一个邮件系统通常有四部分组成:
- 邮件用户代理 (MUA,Mail User Agent)
- 邮件传输代理 (MTA,Mail Transfer Agent)
- 邮件投递代理 (MDA,Mail Delivery Agent)
- 邮件检索代理 (MRA,Mail Retrieval Agent)
MUA
使用 SMTP 协议与邮件服务器(MTA)通信发送邮件,使用 IMAP4/POP3 协议与邮件服务器(MRA)通信接收邮件。常用的有 Foxmail、网易邮件大师、Outlook 等软件。
用户要发送邮件有两种办法:第一种直接登录上邮件服务器(例如ssh)来主动发出邮件;第二种就是需要通过 MUA 来帮你把信送到对方邮件服务器。
在使用 MUA 客户端时,需要配置 SMTP 和 IMAP4/POP3 服务器,比如我使用的 163 邮箱,使用 Foxmail 作为客户端,需要配置如下:
MTA
用在邮件主机上的邮件服务器软件,使用 SMTP 传输邮件。MTA 负责在主机上发送邮件,中转邮件,接收邮件。常见的软件有 sendmail、postfix。
MDA
MDA 是挂在 MTA 下面的一个小程序。各 MTA 程序都有自己的 MDA 功能,常用的 MDA 有:ProcMail(postfix 默认的邮件投递工具)、MailDrop(相对比较专业的投递代理工具)。
最主要的功能是:分析由 MTA 所收到的邮件表头或内容等数据,来决定这封邮件的去向。依照信件的流向(送到哪里)将该信件放置到本机账户下的邮件文件中(收件箱),或者再经由 MTA 将信件送到下个 MTA。
如果信件的流向是到本机,这个邮件代理的功能就不只是将由 MTA 传来的邮件放置到每个用户的收件箱,它还可以具有邮件过滤(filtering),自动回复和其他相关功能。
MRA
负责实现 IMAP4/POP3 协议,在邮件主机上与 MUA 进行交互。常见的 MRA 有:dovecot。
MUA 通过 IMAP4/POP3 的协议连接到 MRA 的端口 110/143,并输入账号与密码来取得正确的认证与授权。MRA 确认该用户的账号和密码没有问题后,会前往该用户的邮箱取得用户的邮件并发送到用户的 MUA 软件上。
由于使用 POP3 协议会将 MUA 已经接收到的邮件删除(即删除邮箱主机上的邮件,因为你已经从主机中取走了邮件),而 IMAP4 这个协议可以将邮件在已被 MUA 取走的情况下存储到你主机上的用户主目录内(即客户端收取邮件后邮件依旧保留在邮箱主机上)。
邮件发收流程
- 本地用户利用 MUA (使用
SMTP
)寄信到 MTA。 - MTA 检查收件人服务器,如果不是自己则(使用
SMTP
协议)传递到下一跳MTA,直到传递到目的 MTA。 - 目的 MTA 收到邮件后将邮件存储到 MDA 中。MDA 对邮件进行垃圾过滤,病毒查杀,自动回复等。
- MRA 把邮件从 MDA 收取到用户的收件箱中。
- MUA (使用
IMAP4/POP3
协议)连接 MRA 收取邮件。此时收取邮件只是将 MRA 中的邮件下载到本地。
总结:如何搭建自己的邮件服务器
按照上述说明,搭建自己的邮件服务器,需要在邮件主机中部署 MTA,MDA,和 MRA 软件。然后在个人电脑平台上使用 MUA 软件,远程登录使用邮件服务。
目前比较流行的是:postfix(MTA、MDA)+ dovecot(MRA)+ foxmail(MUA)