邮件系统中各组件与相关协议的概念梳理

关于邮件传输,我们大体上可以分为三个过程:

1、用户在本地邮件客户端编写完邮件,把邮件投送到本地端的邮件主机

2、本地端邮件主机把邮件投递到远端邮件主机

3、远端用户的邮件客户端拉取远端邮件主机的邮件

为了实现这三个过程,就需要得到邮件系统中多个组件的帮助。下面就梳理整个邮件系统中包含的若干组件,以及相关的协议。

MUA

MUA(Mail User Agent,邮件用户代理),其主要功能就是收受邮件主机上的邮件,以及提供用户编辑浏览邮件的功能。像Mozilla的Thunderbird,Microsoft的Outlook Express等,都是一种MUA。

MTA

MTA(Mail Transfer Agent,邮件传输代理),其主要功能就是收受邮件,以及传递邮件。和MUA不同的是,MTA是发生在邮件主机上的行为,而MUA则是一种本地客户端。

收受邮件

MTA收受邮件采用的是SMTP(Simple Mail Transfer Protocol,端口号25)协议,将来自客户端或者其他MTA的来信收下。

投递邮件

如果邮件的目的地不是本身的用户,且该邮件的相关数据符合使用MTA的权力,MTA就会将该邮件投递到目标邮件主机上。这个过程即为投递(Relay)。承担邮件投递的,即是MDA(Mail Deliveray Agent)的功能,详见下文。

一般我们提到的邮件主机,其实指的就是采用SMTP协议的MTA。像sendmail, postfix等,都是这种类型的MTA。

MDA

MDA(Mail Delivery Agent,邮件投递代理),实际上是挂在MTA下的一个功能组件。其主要功能就是分析MTA收到的邮件表头和内容数据,决定邮件的去向。除此之外,MDA还能过滤垃圾邮件,以及自动回复。

过滤垃圾邮件

我们在MDA的主要功能里说到,MDA会分析邮件表头和内容,因此,MDA是可以对邮件进行分析过滤的。在对付垃圾邮件上,MDA就可以帮助分析过滤掉。

自动回复

我们在发送邮件的时候,有时候会收到对方自动回复的邮件,这其实就得益于MDA的自动回复功能。

Mailbox

Mailbox就是我们最为熟悉的邮件信箱了。在Linux上,邮箱一般位于/var/spool/mail中,一般会根据使用者账号分出不同的目录来。如果MTA收到给自己的邮件,MDA就会把这封邮件投递到Mailbox中去。

MRA

要从邮件主机的Mailbox上把邮件拉取到MUA,就得通过MRA(Mail Retrieval Agent, 邮件检索代理)来实现了。一般来说,MRA有两种协议来实现邮件收取:POP3和IMAP。

POP3

POP3(Post Office Protocol version 3,端口号110),且需要通过邮箱用户名和密码来进行认证授权。MRA在确认该账户的用户名和密码认证没问题后,会前往Mailbox(/var/spool/mail/使用者账号)中检索出使用者的邮件并传送到用户的MUA软件上。当传送完毕后,用户Mailbox上的邮件会被删除

IMAP

POP3协议规定当邮件传送完毕,需要删除Mailbox上的邮件,这就会使得用户在一个地方收取完邮件,就无法在另一个地方重新再看到历史邮件了。而IMAP(Internet Messages Access Protocol)协议则取消了这样的条款,因此,采用IMAP协议的MRA,就不必担心在不同的地方无法读取到历史邮件的问题了。另外,IMAP协议还可以针对邮件做分类管理。

留下评论