基本结构 E-mail系统基于存储转发的机制,整个系统可以分为不同的功能模块,以达到易于实现、灵活性、可扩展性等目标。邮件系统的基本结构包括客户端(MUA)、邮件传输、邮件分发、邮件存储等。 邮件用户代理MUA是用户和邮件系统的接口部分,用户使用它来创作、阅读、管理自己的邮件。MUA可以使用不同的方法来实现,例如OutLook、 Foxmail是运行于Windows系统的MUA,Pine、Kmail是运行在Unix上的MUA,而Hotmail、Yahoo提供的免费邮件则提供Web方式的MUA,甚至一些邮件短消息、通知之类,也可以看作是MUA的辅助功能。 当MUA将邮件交给邮件系统,邮件系统就需要将它们发送给正确的接受主机,这个任务是由邮件传输代理MTA来完成的。邮件系统的设计与具体的网络结构无关,不管是互联网还是UUCP网络,原则上只要具备理解相应网络协议的MTA,邮件系统就可以通过MTA,将邮件从一个主机发送到另一个主机。 当邮件达到目的主机的时候,邮件系统就需要通过邮件分发代理MDA,将邮件发送给具体的用户。 邮件用户代理 一个完整的邮件系统必须提供邮件用户代理MUA支持。最常见的做法是支持标准的用户端软件,这样邮件系统的开发者就不需要关心用户端软件的开发和管理。为了支持标准的用户端软件,邮件系统需要支持POP3或IMAP4协议。 由于POP3协议较为简单,所以得到了更广泛的支持,Unix上的POP3实现多种多样,例如qpopper,这些软件通常是开放源代码的产品。相对而言,IMAP4协议更复杂一些,如华盛顿大学的imapd和cyrus的邮件服务器,都可以用来实际构建邮件服务器或为邮件系统开发者提供参考。 此外,邮件系统也可以自己提供MUA来访问邮件,这种情况最常见的就是WebMail。使用Web界面作为MUA的实现形式有着自己的优点,因为这使得对用户的管理更为集中,用户操作更为简单。 同样,还有一些开放源代码的Web Mail软件,比较有名的有使用PHP开发的IMP、TWIG和使用C语言开发的sqWebMail。 邮件传输 虽然邮件系统理论上的设计与网络类型无关,但具体的邮件传输代理要根据具体的网络类型来实现,而对于互联网来讲,它使用的是SMTP协议及其增强版本ESMTP。 邮件传输代理是邮件系统的核心,通常采用存储转发机制。MTA设计的基本原则就是尽可能将邮件发送到目的地址,而不丢失任何一封邮件。 在Unix/Linux上,也存在着众多不同的邮件传输代理,比较著名的有sendmail、qmail和postfix。其中,sendmail毫无疑问是最流行的系统,几乎所有的Unix的缺省配置中都内置这个软件。但是sendmail安全性差,配置比较困难,这就给管理带来了麻烦。 从qmail开始,邮件系统采用了模块化设计,以提供更好的系统安全性。此外,postfix也采用了类似的方法提高系统安全性,并采取集中配置的方法,配置起来非常简便。 由于邮件传输代理需要长时间运行在服务器端,一旦出现问题就影响整个系统的正常运行,因此对它的稳定性有特别的要求。 邮件分发 邮件分发代理MDA用于将邮件保存到用户的邮箱中,是直接和用户邮箱打交道的部分之一。最著名的邮件是Unix系统中的mail程序,Unix使用它来分发邮件。 在邮件分发中,有时需要系统能完成一些自动操作。例如,当用户有一段时间出门度假,在Unix上的vacation程序就可自动帮助用户回复邮件,把自己的情况告诉发送方。 现在,还有一些更为复杂的MDA实现,能够实现一定的智能化操作,例如procmail、maildrop等。它们可以根据邮件信封上的地址和信件中的具体内容,实现对邮件的自动处理,如柜收、自动回复、自动转发等等。 但是,这些复杂的MDA都存在一个问题,就是配置比较复杂,至少需要一定的编程基础,才能完成对它们的配置,而这样不适合普通用户,因此就需要开发功能更简单一些的MDA,使配置更为直接、易于理解。另一种解决方案是,针对procmail或者maildrop这些复杂的MDA,编写易于理解的管理界面,通过增加一些限制或减少一些功能,适应普通用户的应用。 邮件存储 在整个邮件系统中,存储系统是不可缺少的部分,它将邮件保存到邮箱,从信箱中提取信件交给MUA。因此,用户的信箱格式并非常重要,这关系到整个邮件系统的具体实现。 邮件存储格式的最早形式是mbox格式,这种格式就是在一个文件中保存一个完整的邮件文件夹,这种格式非常适合一次将所有文件都下载的情况,绝大多数Windows下的MUA通过POP3协议,基本上都是将所有邮件一次下载。 邮件系统结构图 另一种方法是将一个邮件放置到一个文件中,使用目录来表示邮件夹。其中最基本的方式是MH格式,它主要用于一种MUA软件mh;最有用的方式是Maildir存储格式,它在文件夹目录下使用了cur、new、tmp子目录来保存不同的邮件。 除了这些公开标准的通用格式之外,还有一些专用格式。cyrus使用的内部存储格式就是一例,其实它就是单文件保存格式的扩展方式。 |
文章来源于领测软件测试网 https://www.ltesting.net/