详解电子邮件系统系列之一:整体架构

电子邮件系统是70后、80后老一代的网民最早接触互联网的入口,当时给别人留一个“伊妹儿”可是最新、最潮的联系方式。时至今日电子邮件非但没有过时,反而在安全认证、个人社交、日常工作中发挥着极其关键的作用,可谓是互联网的基石。了解电子邮件架构,有助于了解整个互联网体系的顶层规划与运行逻辑。可能是技术太老,网上系统介绍电子邮件技术的文章比较少,本系列文章将会详解电子邮件系统的整体架构、工作原理及安全策略,并带大家手把手建设一个符合安全要求的电子邮件系统。

提示:电子邮件系统由于历史悠久,架构整体比较复杂,里面包含很多现代已经使用不多的古早技术,搭建过程的复杂度远远超出本人预期。各组件的学习曲线比较陡峭,其中涉及大量晦涩概念及名词,且对linux操作系统、网络通讯、PKI/TLS 这些知识均需要有一定的了解,需要具备一定的技术能力,遇到问题善用搜索引擎和分析相关日志,否则建议还是使用iredmail这种一站式的软件搭建,或者直接使用各类服务商提供的邮件服务,省心省力。

电子邮件系统历史

说起来有些不可思议,但其实电子邮件诞生的历史是早于互联网的。早期大型机价格昂贵,资源紧缺,当时的科研工作者通过哑终端(Dumb Terminal,只有显示屏和键盘),使用串口接入主机(host)进行工作。关于终端的介绍,可以参考这篇:你真的了解终端吗?。为了方便接入同一主机的工作人员沟通协作,麻省理工学院于1965年开发了世界第一个消息发送程序MailBox。当时的操作系统unix是多任务操作系统,不同用户通过不同的终端登入,可以检查收取邮件或者发送邮件,这就是电子邮件系统的雏形。这个设计对于后世产生了深远的影响,直到今天类unix/linux系统中仍然保留了MaiBox这一设计,请记住这个mailbox的概念,很重要,后面会反复提到

尽管MaiBox解决了消息发送收取的问题,但仅仅局限在同一计算机下。那么如何才能让不同计算机间能发送消息呢?这里就要请出大名鼎鼎的英特网的前身阿帕网了。20世纪60年代,美苏两国正处于冷战时期。美国军方认为中心化部署的指挥中心风险太高,一旦遭受毁灭性打击则全国的军事系统将会陷于瘫痪,故而迫切需要一种去中心化的网络架构,各个节点通过网络设备互相连接,这样某个节点受到打击,其余节点仍可以正常工作,从而在战争中立于不败之地。这项计划叫做ARPANET,它是世界上第一个投入运营的封包交换网络。1969年底阿帕网正式投入使用,最初的阿帕网由美国西海岸的4个节点构成,分别是加州大学洛杉矶分校(UCLA),斯坦福研究院(SRI),加州大学圣巴巴拉分校(UCSB)和犹他大学(UTAH)。后续又陆续增加了多个节点,这就是互联网的雏形。


1971年阿帕网科研项目运营情况历史资料图片

麻省理工学院的Ray Tomlinson博士也参与到了阿帕网计划的科研项目中,他觉得有必要设计一种类似于“信件”的传输服务协议,使得各个主机的MaiBox可以利用阿帕网进行跨主机的邮件传输。于是,Ray Tomlinson博士用了近一年的时间完成了电子邮件(Email)的设计,并在1971年秋天使用SNDMSG软件向自己的另一台计算机发送出了人类历史上第一封电子邮件—电子邮件系统在互联网中由此诞生!

既然要在互联网中给他人发送电子邮件,那么对方用户用于接收电子邮件的名称必须是唯一的,否则电子邮件可能会同时发给多个重名的用户,也或者干脆大家都收不到邮件了。因此,Ray Tomlinson博士决定选择使用“姓名@计算机主机名称”的格式来规范电子信箱的名称。选择使用@符号作为间隔符的原因其实也很简单,因为Ray Tomlinson博士觉得人类的名字和计算机主机名称中应该不会有这么一个@符号,所以就选择了这个符号。

电子邮件系统整体架构

电子邮件系统架构

这张图非常重要,展示了电子邮件系统运作的核心架构,后面的文章中会反复用到,理解了这张图就理解了电子邮件系统运行的底层原理。图中内容分别介绍如下:

MailBox

类Unix/Linux 系统中的mailbox格式主要有两种:mbox格式和Maildir格式,通常存储在 /var/mail 或者 /var/spool/mail 目录下。

  1. mbox格式:

mbox是一种简单的文件格式,它将所有的邮件存储在单个文件中。mbox文件的每行都以“From ”开头,后跟发件人的信息和日期。这就是为什么mbox文件有时也称为“From ”文件。在mbox文件中,每个邮件都由两个“From ”行分隔开。在Unix中,这些行通常由一个冒号和一个换行符组成,例如“From: sender@example.com\n”。为了避免意外中断,邮件正文中的所有“From ”行都必须被转义。

  1. Maildir格式:

Maildir格式是一种使用多个目录来组织邮件的格式。Maildir格式将每个邮件存储在单独的文件中,这使得它更易于管理和备份。Maildir格式包括三个目录:cur,new和tmp。

  • cur目录包含已读邮件的副本。
  • new目录包含未读邮件的副本。
  • tmp目录用于临时存储邮件,直到邮件完全传输到目标位置为止。

Maildir格式还包含一些附加信息,例如邮件的状态(例如已读或未读)和邮件的标记(例如已回复或已删除)。

无论是mbox还是Maildir格式,都可以使用各种邮件客户端程序进行读取和管理。邮件客户端程序通常支持这两种格式中的一种或多种。

邮件角色

  • MUA(Mail User Agent)接收邮件所使用的邮件客户端,使用IMAP或POP3协议与服务器通信;例如Foxmail或Outlook。
  • MTA(Mail Transfer Agent) 通过SMTP协议发送、转发邮件;例如Linux中的sendmail和postfix。
  • MDA(Mail Deliver Agent)将MTA接收到的邮件保存到磁盘或指定地方,通常会进行垃圾邮件及病毒扫描;
  • MRA(Mail Receive Agent)负责实现IMAP与POP3协议,与MUA进行交互;

邮件协议

  • SMTP(Simple Mail Transfer Protocol) 发送邮件所使用的标准协议, 普通协议使用25端口,SSL/TLS 协议(SMTPS)使用465端口,STARTTLS 协议(smtp-submission)使用587端口;
  • IMAP(Internet Message Access Protocol) 接收邮件使用的标准协议之一, 普通协议使用143端口,SSL/TLS 协议(IMAPS)使用993端口;
  • POP3(Post Office Protocol 3) 接收邮件使用的标准协议之一,普通协议使用110端口,SSL协议(POP3S)使用995端口;

其中pop3属于比较早期的协议,需要把邮件全部下载到本地,且本地的操作比如删除、打标等不能回传到服务端,现在已经比较少使用,imap的操作是双向的,即客户端本地操作可以同步到服务端,目前主流的邮件服务器都是使用的smtp及imap协议,有些出于历史兼容性考虑也会支持pop3。

有些文章中说smtp协议用于发送邮件,pop3/imap协议用于接收邮件,严格意义上来说是不准确的。上述的说法,视角是站在客户端的,即邮件客户端(MUA)使用smtp协议发送邮件,使用pop3/imap协议接收邮件。smtp协议定义的是邮件传输标准,即smtp协议即可以发邮件,也可以收邮件。事实上,各个MTA之间都是使用smtp协议来传输邮件,比如新浪邮箱传输邮件到谷歌邮箱:

电子邮件传输过程

上述流程中,谷歌的MTA作为接收方使用smtp协议接收新浪传过来的邮件。

邮件传输完整流程

搞清前面说的那些概念,对照电子邮件系统架构图,邮件发送和接收的整体流程如下:

  • step 1:发送方邮件客户端(MUA)通过smtp协议发送邮件至发送方MTA
  • step 2:发送方MTA查询接收方邮件域名的dns mx记录,获取接收方MTA的ip地址
  • step 3:发送方MTA通过smtp协议发送邮件给接收方MTA
  • step 4:接收方MTA将邮件发给MDA(投递代理)
  • step 5:MDA将邮件存入主机的 MailBox 文件中
  • step 6:接收方邮件客户端(MUA)通过imap/pop3请求MRA接收邮件
  • step 7:MRA 从主机的 MailBox 中读取最新邮件

常用邮件软件对应关系

  • MUA:outlook、thunderbird、Mac Mail、Foxmail、mail/mailx(命令行)、mutt(命令行)

  • MTA:sendmail、postfix

  • MDA:procmail、dropmail

  • MRA:dovecot

一般自建的话,只需要 postfix + dovecot,我们基于这些软件搭建的电子邮件系统架构如下图所示:


自建邮件系统整体架构

对照电子邮件系统架构图,postfix扮演MTA、MDA角色,dovecot扮演MRA角色

自建准备工作

为什么要自建邮件服务器?我这里罗列了一下好处(不是我说的,是ChatGPT说的啊):

  • 控制权:自建邮件服务器使您完全掌控邮件的管理和存储。您可以自由配置服务器以满足特定需求,包括邮件大小、邮箱数量、存储限制等。此外,您也可以对安全性进行控制,例如加密邮件、过滤垃圾邮件等。
  • 可定制性:与使用第三方邮件服务不同,自建邮件服务器提供了更多的自定义选项,可以根据个人或企业的需求进行调整。例如,您可以在自建邮件服务器上设置自定义的域名、标识、邮件模板等。
  • 数据隐私:自建邮件服务器可以更好地保护您的数据隐私,因为您可以自己控制存储在服务器上的所有数据,而不必将其托管给第三方服务提供商。此外,自建邮件服务器还可以使用加密协议,如SSL或TLS,以保护数据传输的隐私。
  • 成本节约:使用自建邮件服务器可以节省成本,尤其是在长期使用中。虽然设置自建邮件服务器需要一些初始投入,但长期来看,与使用第三方邮件服务相比,自建邮件服务器可能会更具经济性。

自建服务器需要准备如下资源,相关资源申请方法不在本文档讨论范围内,请自行研究:

  • 一个具备公网独立ip的vps,配置不用太高,各大公有云均可
  • 一个域名,邮件系统搭建需要配置各类dns记录,后面会说
  • 证书,可使用acme.sh 等自动化工具签发 Let’s Encrypt 免费证书

如果你看到这里还没有头晕,仍然想继续,那请继续看下一篇:详解电子邮件系统系列之二:SMTP、POP3及IMAP协议介绍

参考资料

1、第15章 使用Postfix与Dovecot部署邮件系统。
https://www.linuxprobe.com/chapter-15.html

2、基础邮件原理(MUA,MTA,MDA)
https://www.cnblogs.com/yechanglv/p/6947117.html

3、电子邮件系统是如何运作的?
https://www.linuxdashen.com/%e7%94%b5%e5%ad%90%e9%82%ae%e4%bb%b6%e7%b3%bb%e7%bb%9f%e6%98%af%e5%a6%82%e4%bd%95%e8%bf%90%e4%bd%9c%e7%9a%84%ef%bc%9f

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,362评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,330评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,247评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,560评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,580评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,569评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,929评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,587评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,840评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,596评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,678评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,366评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,945评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,929评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,165评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,271评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,403评论 2 342

推荐阅读更多精彩内容