电子邮件系统是如何运作的?
由Linux魔法师

电子邮件的历史

电子邮件的出现比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或/var/spool/mail/USER或/var/spool/mail/USER。你可以输入下面的命令来查看这个文本文件的具体路径。

echo $MAIL

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

另外一种新的格式是maildir。在maildir格式下,/var/mail/USER或/var/spool/mail/USER或/var/spool/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。

电子邮件系统是如何运作的?相关推荐

  1. LinuxProbe 0x17 DHCP动态管理主机地址、电子邮件系统

    动态主机配置协议(DHCP,Dynamic Host Configuration Protocol),该协议用于自动管理局域网内主机的IP地址.子网掩码.网关地址及DNS地址等参数,可以有效地提升IP ...

  2. extmail电子邮件系统

    Extmail电子邮件系统搭建 一.结构图 二.搭建过程 1.安装需要的软甲包 [root@ahao1 ~]# yuminstall httpd     mysql  mysql-server mys ...

  3. 6.4 你真的了解电子邮件系统的组成和结构吗?(SMTP、POP3、IMAP、MIME……)

    文章目录 0.思维导图 1.电子邮件的信息格式 2.电子邮件系统的组成结构 3.电子邮件协议 (1)SMTP MIME---多用途网络邮件扩充 (2)POP3 IMAP---因特网报文存取协议 (3) ...

  4. 搭建基于虚拟账号的电子邮件系统

    使用postfix,cyrus-sasl,courier-authlib,mysql,dovecot,extmail,extman搭建电子邮件系统,可以使用web方式以虚拟账号注册登录邮箱,并且发送接 ...

  5. FTP协议、电子邮件系统与Telnet远程控制

    一.FTP协议概述 FTP定义 文件传输协议 用于因特网文件传输 FTP特性 使用客户端/服务器模式 使用TCP提供可靠的传输 FTP属于维护状态的协议 FTP使用两条TCP连接完成数据传输 FTP的 ...

  6. FTP协议、电子邮件系统、Telnet远程控制

    一.FTP协议 FTP定义 文件传输协议(File Transfer Protocol) 用于因特网文件传输(RFC 959) FTP特性 使用客户端/服务器模式 使用TCP提供可靠的传输 FTP属于 ...

  7. 完全揭秘***利用漏洞***电子邮件系统

    在不断公布的漏洞通报中,邮件系统的漏洞该算最普遍的一项.***常常利用电子邮件系统的漏洞,结合简单的工具就能达到***目的.电子邮件究竟有哪些潜在的风险?***在邮件上到底都做了哪些手脚?一同走进** ...

  8. 2022企业电子邮件在哪里找,企业电子邮件系统哪个安全?

    随着企业邮箱的普及,网上乱飞的广告逐渐增多,企业电子邮件在哪里找?什么电子邮件系统才算是好用的. 企业电子邮件是什么? 企业电子邮件,是用自定义名字的邮箱,前缀后缀域名都可自定义.企业内每个人都有一个 ...

  9. vps php mail,TMail v5.2 – PHP多域名临时电子邮件系统

    释放双眼,带上耳机,听听看~! 源码简介 TMail是一个一次性电子邮件系统,可以在自己的主机上进行托管. 您只需要几个常见的PHP扩展和IMAP服务就可以使用这个源码. 安装使用相对比较简单. 源码 ...

  10. 什么是电子邮件系统?电子邮箱的格式是什么?怎样注册163邮箱呢

    在工作中,我们用到的电子邮箱是比较多的,如TOM邮箱,平时收发邮件都需要我们会用到邮箱,那你知道什么是电子邮件系统吗?当我们发送邮件时邮箱格式不要忘记,电子邮箱格式是什么?如何注册邮箱呢?一起看看吧! ...

最新文章

  1. css:hover选择器
  2. 目标检测的图像特征提取
  3. 搜索引擎Solr系列(二): Solr6.2.1 从MySql中导入数据
  4. can协议crc计算_CAN总线的升级版——CAN FD简介
  5. php accesscontrolalloworigin,设置Access-Control-Allow-Origin实现跨域访问
  6. linux自学笔记--memcache和varnish缓存服务器
  7. 【神经网络】给初学者们讲解人工神经网络(ANN)
  8. treemap怎么保证有序_你对多线程熟悉吗,谈谈线程安全中的原子性,有序性和可见性?...
  9. keil spi 调试_单片机软件出问题了?有经验的工程师这么调试
  10. AirPlay 投影到 Mac 看不到选项如何解决?
  11. VS2013+VAX使用技巧
  12. 原来win7专业版64位 MBR方式安装win10专业版_x86
  13. 基于阿里云的一般性系统安全措施介绍
  14. 小程序汉字拼音的解决思路
  15. python字典题_Python字典练习题
  16. 外贸找客户软件:Top Lead Extractor
  17. ADF11g-041:禁止或允许其它网站添加ADF页面到iframe中
  18. 【kafka】Flink消费kafka Error sending fetch request
  19. 有一个人有一百块钱, 打算买一百只鸡, 现在大鸡三块钱一只, 小鸡一块钱三只, 不大不小的鸡两块钱一只. Java编程实现,刚好用一百块钱买一百只鸡.
  20. 电竞级还带主动降噪,莱仕达X2无线蓝牙耳机实测,品控值得安利

热门文章

  1. Java设计模式系列之迭代器模式
  2. property中的strong 、weak、copy 、assign 、retain 、unsafe_unretained 与autoreleasing区别和作用详解...
  3. CST、PVST、PVST+、rapid-PVST+、MSTP
  4. GBin1分享:一个漂亮的jQuery页面内容导航插件 - Flexiable Nav
  5. Oracle PL/SQL基础
  6. 【目录】数据结构与算法
  7. vue 组件创建与销毁
  8. 构建手机apk的过程
  9. ---perl 模块安装方法
  10. iphone中input标签会多出一块的解决办法