电子邮件系统有很多部分组成,各种各样的代理服务看到令人实在眼花缭乱。下面主要和大家一起介绍一下电子邮件系统构成的其中五个代理,即邮件用户代理MUA,邮件传送代理MTA,邮件投递代理MDA以及邮件获取代理MRA,邮件提交代理MSA。
MUA :邮件用户代理MUA(Mail User Agent)是用于发送或许接收电子邮件的客户端顺序。MUA 也可以是一个顺序或许脚原模拟了一个典型MUA 正在发送或许接收Email 时的行为。MUA 正在发送电子邮件时运用SMTP/ESMTP 协议来与一个MTA 对话,正在接收邮件时,运用POP3 协议或许IMAP4 协议。MUA还提供邮件编写界面等功能。常用的MUA 客户端软件有Outlook、Outlook Express、Foxmail、ThunderBird、The Bat、mutt等。
Outlook Express是Microsoft(微软)自带的一种电子邮件,简称为OE,是微软公司出品的一款电子邮件客户端,也是一个基于NNTP协议的Usenet客户端。微软将这个软件与操作系统以及Internet Explorer网页浏览器捆绑在一起。
Foxmail邮件客户端软件,是中国最著名的软件产品之一,是由华中科技大学(原华中理工大学)张小龙开发的一款优秀的国产电子邮件客户端软件,2005年3月16日被腾讯收购。新的Foxmail具备强大的反垃圾邮件功能。它使用多种技术对邮件进行判别,能够准确识别垃圾邮件与非垃圾邮件。垃圾邮件会被自动分捡到垃圾邮件箱中,有效地降低垃圾邮件对用户干扰,最大限度地减少用户因为处理垃圾邮件而浪费的时间。
Thunderbird是由Mozilla浏览器的邮件功能部件所改造的邮件工具,使用 XUL 程序介面语言所设计,是专门为搭配 Mozilla Firefox 浏览器使用者所设计的邮件客户端软件,介面设计更简洁、而且免安装。 这款软件非常优秀,目前官方最新版本为 9.0.1,早期版本有 2.0.0.24 和 3.1.17;2.x 和 3.1.x 系列的后台资源占用很低,适合配置不高的用户;9.0.x 系列资源占用较高但数据安全性有了很大提高,功能也更加丰富。
mutt是linux下的一个email程序。Mutt 显然是一个 Unix 的邮件程序,它跟一般的 Windows 邮件程序不同,它不是一个包罗万象的大杂烩。你甚至会发现它根本不直接发出邮件,它从来不自己编辑邮件,它从来不自己对邮件进行加密和数字签名……Mutt 更像一个文件管理器,只不过它管理的是email。它的功能是借助各个最强大的程序来实现的。
这些都是专用的邮件用户代理,邮件用户代理还可以帮我们发邮件(新建一个邮件-->填写收件人,发件人,抄送给谁,内容-->确定直接可以发送了)虽然操作很简单但是无法了解到背后操作过程,而且都是无条件转发和收取。现在大部分邮件服务器都默认没有开启中继功能。
除了MUA之外还有一个服务器要装上之后既能够当做客户端用的服务端又能够提供smtp和smtpd这样一个帮我们实现邮件传递的叫做MTA
MTA :邮件传输代理(Mail Transfer Agent) 作用是正在不同的主机之间传送电子邮件,它运用SMTP 协议,罕见的MTA 效劳软件有sendmail、qmail、Postfix、exim。MTA 接收来自MUA(Mail User Agent 邮件用户代理)或许是其他MTA、MDA(MailDelivery Agent 邮件投递代理)的邮件,它解析邮件头来绝议邮件的接收者。一般,MTA 需求重写邮件头,然先查找DNS 一定收件人信箱所正在的远程主机,并经过网络发送给其他MTA 或许MDA。目前比较流行的有这样几种:
sendmail:sendmail是最重要的最古老的邮件传输代理程序。它的安全性较差,这是因为当其作者Eric Allman最初开始写作这个软件的时候,Internet的用户还很少,因而安全性并不没有得到大家的重视。由于邮件系统需要处理的是外部发送来的各种各样的信息,甚至包含一些恶意数据,然而sendmail在大多数系统中都是以root身份运行,一旦出现问题,就会对系统安全造成严重影响。在这种情况下,要防止出现安全问题,仅仅依赖程序本身是不可取的,应该从系统结构出发,使程序拥有的特殊权限限制到最小。也是由于其早期的Internet用户数量及邮件数量都相当小,Sendmail的系统结构并不适合较大的负载,对于高负载的邮件系统,需要对Sendmail进行复杂的调整。例如,通常情况下sendmail只启动一个进程顺序向外发送邮件,如果邮件较多时就要花费相当长的时间。
qmail:Qmail具有安装方便、安全性高、邮件结构合理、支持SMTP服务、队列管理、邮件反弹、基于域名的邮件路由、SMTP传输、转发和邮件列表、本地(邮件)传送、POP3 服务等强大的功能而且效率非常之高。它已经逐渐替代传统的Sendmail成为linux下邮件系统内核的主流选择。为了解决 sendmail的安全问题,整个系统结构需要重新设计。基本的原则是将系统划分为不同的模块,有负责接收外部邮件的,有管理缓冲目录中待发送的邮件队列的,有将邮件发送到远程服务器或本地用户的。Qmail就是按照这个原则进行的设计,它由多个不同功能的小程序组成,只有必要的程序才是setuid程序(即以root用户权限执行),这样就减少了安全隐患,并且由于这些程序都比较简单一些,因此就可以达到较高的安全性。
这种按照Unix思路的模块化设计方法也使得Qmail具备较高的性能,因为如果需要,Qmail可以启动某个模块的多个实例来完成同一个任务,例如启动多个发送程序同时向外发送邮件,这对于提供邮件列表服务的邮件系统是非常有益的。这种方式也使得Qmail要占用较大的网络带宽,如果带宽有限,效果反而不好,但在当前网络性能大幅度提高的情况下,这种方式是非常合适的。
Qmail还提供一些非常有用的特色来增强系统的可靠性,例如,它提出了Maildir格式的邮件存储方式,这使得通过网络文件系统NFS存取邮件成为可能。此外,Qmail还具备一些非常别致的特色,它不仅仅提供了与Sendmail兼容的方式来处理转发、别名等能力,还可以用以Sendmail完全不同的方式来提供这些功能。从它的编译安装方式、提供的扩展功能和源代码的风格,可以看出其作者DanBernstein是一个极具个性化的程序员。正因为如此,对于Qmail的某些方面,有着一些争论,例如有些人认为Qmail的安装设置并不易于理解,很容易让人糊涂,而另一些人的看法则相反。基本上这是因为Qmail提供解决问题的方式,和Sendmail不大相同的缘故,这样对那些不太熟悉 Sendmail的邮件系统管理员,反而更容易接受Qmail一些。
但是由于作者后期不在维护导致昙花一现,着实让我们感到很失望。不过全球爱好者们还在继续维护更新中。
postfix:postfix是Wietse Venema在IBM的GPL协议之下开发的MTA(邮件传输代理)软件。安全性极佳,Postfix 同样也是采用了模块化的方式,但与Qmail不同的是,Postfix使用了一个主控进程进行监控。Postfix在很多方面都考虑到了安全问题,它甚至不root分发电子邮件,以避免以root身份读写文件或启动外部程序。考虑到它的作者WietseVenema曾编写了著名的安全软件TcpWrapper,并是SATAN程的合作人员之一,Postfix的安全性是非常值得信赖的。同样,Postfix的性能也非常不错,甚至在Qmail作者自己进行的测试中也表明,Postfix的性能和Qmail基本相当。但Postfix占用的内存要大一些,这主要是由于Postfix和Qmail在系统结构上的差异造成的。与Qmail不同,Postfix更着眼于作为Sendmail的直接替换,使用Postfix替换Sendmail却相当简单,因为Postfix使用的很多文件和Sendmail一致,只需要在配置文件中指明原有Sendmail配置文件的位置就可以了,Postfix甚至还提供了sendmail和mailq程序,以保持兼容性。基本上,可以直接从Sendmail转换为使用Postfix,而不需要额外的设置。Postfix提供的安装配置方式也相当简单,它使用中心化的配置文件和非常易理解的配置指令。
Postfix提供的一些强大的功能主要在于多种数据库表查询方式,例如它支持DB、DBM、passwd文件、正则表达式、MySQL数据库以及LDAP方式的查询,用于支持系统级的别名、虚拟主机等。虽然在Qmail中也能支持这些功能,但没有象Postfix那样统一、简洁。此外,更改Postfix的设置之后,也不需要重新启动整个系统,只需要使用postfix reload就能完全刷新配置,这也避免了丢失邮件的可能性。
Exim:Exim是基于GPL协议的开放源代码软件,由英国剑桥大学的Philip Hazel开发。Exim是一个MTA,负责邮件的路由,转发和投递。
Exim有两种称为Driver的元素:Router和Transport。Router对一个邮件地址进行操作,决定如何投递,即交给那个Transport,或对地址进行转换。Transport将邮件从Exim的队列中投递到目的地。Exim有本地和远程两种类型的Transport。邮件被Router成功处理后,交给Ttansport。如果一封邮件有多个收件人,它可能同时被多个不同的Transport处理。每个Router必须指定一个Transport,当Router运行成功时,即把邮件交给Transport来投递。通过String Expansion,Exim几乎有了无限的扩展能力,实现无限复杂的需要。邮件系统管理员可以根据自己的需要,设计相应的数据格式,然后通过String Expansion进行转换和判断。
courier:Courier-MTA 是一个优秀的电子信件系统,功能上它远比Qmail、 Postfix 等我们已经熟知的系统完整,包含了 ESMTP (含身份认证)、 POP3、 IMAP、 传真、网页信箱界面、保密通信 (SSL 和 TLS 涵盖 SMTP、 POP3、 IMAP)、多种用户数据库 (UNIX 操作系统的用户数据文件 (通过 PAM(3))、Berkeley DB、LDAP、MySQL、PostgreSQL)。而它也吸收了先前信件系统的优点。Courier 中的信件过滤器 maildrop、IMAP 服务器组件还常被与其它电子信件系统 (如Postfix) 配合使用。
Exchange Server:Microsoft Exchange Server 是个消息与协作系统。Exchange server可以被用来构架应用于企业、学校的邮件系统或免费邮件系统。它还是一个协作平台。你可以在此基础上开发工作流,知识管理系统,Web系统或者是其他消息系统。 是一个主面的Intranet协作应用服务器,适合有各种协作需求的用户使用。Exchange Server协作应用的出发点是业界领先的消息交换基础,Exchange Server提供了包括从电子邮件、会议安排、团体日程管理、任务管理、文档管理、实时会议和工作流等丰富的协作应用,而所有应用都可以从通过Internet浏览器来访问。
MDA :邮件投递代理(Mail Deliver Agent)
许多邮件传递代理都有自带的邮件投递代理maildrop是一个负责本地邮件并且包含邮件过滤语言的MDA工具,maildrop首先从标准输入读取E-mail信息,如果文件/etc/maildroprc存在,邮件投递或邮件过滤将从/etc/maildroprc中读出。maildrop的投递/过滤指令可能把信息保存在一个特殊的mailbox,或者丢弃它,或者返回给发送者,或者转发到不同的邮件地址。
MRA :(Mail Retrieval Agent)邮件获取代理提求了使MUA 可以远程获取电子邮件的效劳,如qpoper、cyrus-imap、courier-imap、dovecot 等,为了使得邮件存取格式兼容,正在MRA 顺序中经常都提求了邮件投递代理顺序MDA。MRA 运用的协议有POP3 和IMAP4 等。POP3 可以运用户从效劳器下载邮件并离线阅读。IMAP4 运用于那些没有外地信箱的用户,具有远程操作信箱的才干。IMAP4 容许多个客户机器同时访问一个信箱。原文想象的系统中,Webmail 正在先台便是经过IMAP4 协议来访问用户信箱的。
MSA :邮件提交代理(Mail Submission Agent)将邮件发给邮件网关,然后由网关过滤发出。
SASL 为应用程序和共享库的开发者提供了用于验证、数据完整性检查和加密的机制。开发者可通过 SASL 对通用 API 进行编码。此方法避免了对特定机制的依赖性。SASL 特别适用于使用 IMAP、SMTP、ACAP 和 LDAP 协议的应用程序,因为这些协议全都支持 SASL。
SASL 库基础
SASL 库称为
libsasl 。libsasl 是一个框架,允许正确编写的 SASL 消费方应用程序使用系统中可用的所有 SASL 插件。术语插件是指为 SASL 提供服务的对象。插件位于 libsasl 的外部。SASL 插件可用于验证和安全性、名称标准化以及辅助属性(如口令)的查找。加密算法存储在插件中,而不是 libsasl 中。
libsasl 为消费方应用程序和库提供应用编程接口 (application programming interface, API)。服务提供者接口 (service provider interface, SPI) 是为插件提供的,用于为 libsasl 提供服务。libsasl 不能识别网络或协议。相应地,应用程序必须负责在客户机与服务器之间发送和接收数据。
SASL 对用户使用两个重要的标识符。验证 ID (authid) 是用于验证用户的用户 ID。验证 ID 授予用户系统访问权限。授权 ID (userid) 用于检查是否允许用户使用特定选项。
SASL 客户机应用程序和 SASL 服务器应用程序将协商公用的 SASL 机制和安全级别。通常,SASL 服务器应用程序会将其可接受的验证机制的列表发送给客户机。随后 SASL 客户机应用程序便可决定哪种验证机制最能满足其要求。此后,客户机与服务器使用双方同意的验证机制,对它们之间交换的由 SASL 提供的验证数据进行验证。此交换将持续下去,直到验证成功完成、失败或被客户机或服务器中止。