基本結構 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使用的內部存儲格式就是一例,其實它就是單文件保存格式的擴展方式。 |