电子邮件系统是如何运作的?

电子邮件的历史

电子邮件的出现比Internet的出现要早。电子邮件于1965年在MIT诞生。当时,MIT开发出了一种分时操作系统,可以让多个用户在各自的终端同时登录并使用同一个大型机。一个用户可以给同一个大型机上的另外一个用户发送电子邮件。随着Internet的出现,电子邮件可以发送到世界的任何一个邮件服务器上。

电子邮件系统的六个组成部分

如今的电子邮件系统由以下六个部分组成:

MTA      MDA      mailbox    POP3/IMAP Server      MUA      MSA

在下文中,我用中文“服务器”来表示硬件意义上的服务器,用英文”Server”来表示软件意义上的服务器。

MTA

MTA的全称是Mail Transfer Agent。MTA的职责是向其他MTA发送邮件,接收或拒收其他MTA发来的邮件。邮件的发送和接收是通过SMTP协议在各个邮件服务器的MTA之间完成的,所以MTA又可以被称为SMTP Server。MTA还有很多别名,如 Message Tranfer Agent, Mail Relay, Mail Exchanger。

 发件人MTA ----------->> 收件人MTA

MDA

MDA的全称是Mail Delivery Agent。它负责把本地MTA从远程发件人MTA接收到的邮件投递到用户的邮箱(mailbox),这个过程叫做本地邮件投递,所以MDA又被称为LDA(Local Delivery Agent)。你也可以让MDA自动回复邮件。

发件人MTA ------->> 收件人MTA -------->> MDA ---------->> 收件人mailbox

Mailbox

Mailbox用来存放用户的邮件,用户可以使用POP3协议或IMAP协议查看邮件服务器上mailbox里的邮件。

POP3/IMAP Server

POP3/IMAP Server负责把mailbox里的邮件传递给MUA,以供用户查看。

收件人mailbox ------->> POP3/IMAP Server ----->> 收件人MUA

MUA

MUA的全称是Mail User Agent,也被叫做email client。它分为两类,一类是本地邮箱客户端,比如thunderbird,foxmail,outlook。本地邮箱客户端是安装在用户电脑上的。另一类是web邮箱客户端,英文名叫webmail。web邮箱客户端安装在web服务器上,用户通过浏览器使用web邮箱客户端。例如,我们经常在浏览器地址栏输入mail.qq.com使用腾讯QQ的web邮件客户端。MUA有两个功能,一是查看邮件。一般情况下,图形界面的MUA通过POP3 Server或IMAP Server来查看mailbox里的邮件,不过很多命令行MUA可以直接访问邮件。

收件人mailbox -------->> POP3 Server/IMAP Server -------->> 收件人MUA

MSA

MUA的另外一个功能是发邮件。当MUA发邮件时,需要借助MSA。MSA是的全称是Mail Submission Agent。当用户使用MUA写好邮件,点击发送按钮后,MSA从MUA那里接收邮件,然后提交给发件人的MTA,发件人的MTA再把邮件投递给收件人的MTA。

发件人MUA-------->> MSA --------->> 发件人MTA ------->> 收件人MTA

所以一封邮件从发件人撰写到收件人查看要经历如下过程:

发件人MUA------>> MSA ------->> 发件人MTA ------>> 收件人MTA ------>> MDA ---------->> 收件人mailbox ------>> POP3/IMAP Server -------->> 收件人MUA 

这是一般的过程,有时情况会有所不同。例如,有些MTA会自己把邮件存放在mailbox里,而不会把邮件交给MDA来处理。

邮件服务器是如何管理mailbox的

mbox格式

传统上,Unix-like服务器指定一个文本文件存放用户的所有的邮件。这个文本文件是/var/mail/$USER或/var/spool/mail/$USER。你可以输入下面的命令来查看这个文本文件的具体路径。

echo $MAIL

用户所有的邮件存放在同一个文本文件中。每一封邮件以From字样区别开来,From是每一封邮件的开头,每一封邮件的最后一行总是空白行。接收的新邮件将被添加到文件的末尾。这种传统的格式叫做mbox。你可以使用文本编辑器直接打开这种格式的文件。

maildir格式

另外一种新的格式是maildir。在maildir格式下,/var/mail/$USER或/var/spool/mail/$USER是一个目录,这个目录下有三个目录:new, cur, tmp。这三个目录下有很多文件,每一个文件都是一封邮件。其中,new目录下的邮件是未读邮件,cur目录下的邮件是已读邮件,tmp目录是在确认邮件到达new目录前的临时存放目录。当用户阅读了new目录下的一封邮件时,这封邮件便会移动到cur目录下。

电子邮件系统的协议

SMTP协议

SMTP协议是MTA之间的通信协议,使用TCP 25号端口。MUA和MSA之间也使用SMTP协议,这时它们使用的是TCP 587号端口。

POP3协议

POP3协议是早期的一种查看邮件的协议。用户需要把邮件从服务器上下载到自己的电脑之后才能查看邮件。POP3协议默认会把已下载的邮件从邮件服务器上删除,但也提供了保留邮件的选项。POP3协议是一种单向协议,这意味着用户不能对邮件服务器做更改。如果用户从不同的设备查看邮件,那么之前已阅读的邮件在新设备上的状态还是显示未读。

IMAP协议

IMAP协议也是一种用于查看邮件的协议,用户不需要下载邮件。与POP3不同的是,IMAP可以对邮件服务器做更改。比如阅读一封邮件后,在另外一设备查看邮件时已阅读邮件的状态会显示已经阅读。用户在删除一封邮件后,在其他设备上也会显示已经删除。我们可以把IMAP协议看成是一种具有同步功能的协议。

并不是所有的用户都需要 POP3/IMAP服务器才能查看邮件。有些用户可以 SSH访问邮件服务器,这时,他们可以使用命令行 MUA读取邮件。这些命令行 MUA,比如 heirloom-mailx, mutt,都不需要 POP3/IMAP服务器,它们可以直接访问邮件。

加密方式:SSL/TLS和STARTTLS

这两种加密方式都是使用SSL/TLS来加密邮件。它们的区别在于SSL/TLS需要另外打开一个端口,STARTTLS不需要另外打开一端口。

  • IMAP使用143端口,经过SSL/TLS加密的IMAPS协议使用993端口。
  • POP3使用110端口,经过SSL/TLS加密的POP3S协议使用995端口。
  • SMTP使用25端口,经过SSL/TLS加密的SMTPS协议使用465端口。

而STARTTLS可以在原有的端口上加密IMAP、POP3和SMTP协议,它们分别仍然使用143、110、25端口。

电子邮件系统中常见的软件

电子邮件系统六个部分组成,分别负责六个不同的任务。但有些软件可以同时充当多个角色,负责多个任务。比如MTA和MSA可以集成在同一个软件。

Sendmail

Sendmail是一个古老的MTA,在上世纪80年代就诞生了。Sendmail在1996年的市场份额高达80%,之后逐渐下降。现在仍然有大量邮件服务器在使用sendmail作为SMTP服务器。

Postfix

Postfix是Unix-like服务器上常见的一个MTA,市场份额大约占32%。它与Sendmail相兼容,但比sendmail更安全,配置更加容易。实际上,它就是为了解决sendmail安全性不足与配置麻烦这两个问题而开发出来的。IBM在早期把它叫做Secure Mailer。Postfix也实现了MSA的功能。另外,Postfix自身也包含了一个简单的MDA,可以实现本地邮件投递的功能。但邮件服务器管理员也可以安装一个功能更加完善的MDA软件,如Dovecot。

Dovecot

Dovecot是一个POP3/IMAP Server,同时也是一个MDA。Dovecot把MDA称为LDA(Local Delivery Agent)。

本地域名

一个MTA可以为不同域名的用户提供接收和发送邮件的功能。这些域名叫做本地域名。邮件服务器的管理员需要让MTA知道哪些域名是本地域名。如果收件人的域名不是本地域名,那么邮件将被转发出去。例如,domain1.com和domain2.com被指定为本地域名,domain3不是本地域名,那么MTA将接收domain1.com和domain2.com的邮件,对于domain3.com用户的邮件,MTA不会保存这封邮件,而是将它转发出去。

邮件转发服务器:open relay 和 smart host

open relay:任何邮件服务器的MTA都可以使用open relay将邮件转发到收件人的MTA。open relay经常被spammer利用,来发送垃圾邮件。Spammer不想把自己的身份暴露给收件人的MTA,所以他们积极寻找并利用open relay来隐藏自己的身份。open relay通常会被gmail,qq邮箱,网易邮箱等邮箱服务商列入黑名单。

smart host则不同,其他邮件服务器的MTA要先经过 SMTP AUTH 验证才能使用smart host将邮件转发给收件人的MTA。

邮件服务器管理员需要让MTA知道是否要启用转发功能。如果启用了转发,那么必须指定哪些主机可以使用转发。很显然我们不希望将自己的邮件服务器变成一个open relay。

为这篇文章评分
[Total: 8 Average: 4.4]

发表评论

电子邮件地址不会被公开。 必填项已用*标注