余靜芬
摘要:隨著網(wǎng)絡(luò)技術(shù)不斷發(fā)展,電子郵件日益受到眾多用戶青睞。本文介紹了嵌入式Linux的Web郵件系統(tǒng)設(shè)計(jì)。在說明郵件系統(tǒng)收發(fā)及傳輸原理基礎(chǔ)上,對于基本郵件軟件qmail的收發(fā)機(jī)制進(jìn)行詳細(xì)的闡述。
關(guān)鍵詞:Linux qmail Web郵件系統(tǒng) 嵌入式數(shù)據(jù)庫
0 引言
由于電子郵件不受時(shí)間、空間的限制,其成為最基本、最普及、最方便的網(wǎng)絡(luò)通訊功能。目前,由于電子郵件收發(fā)系統(tǒng)本身存在著若干漏洞,其中最引人注目的是接收大量的垃圾郵件與黑客利用電子郵件進(jìn)行的病毒(如木馬)入侵,這些都需要靠人工處理。把E-mail和Web技術(shù)結(jié)合起來,通過Web編程和適當(dāng)?shù)南到y(tǒng)設(shè)置,使用戶只需要訪問Web就可以得到和使用完整的郵件服務(wù),我們把這種系統(tǒng)稱為webmail[1]。本文就基本郵件服務(wù)器的構(gòu)建技術(shù)進(jìn)行相關(guān)分析,提供基于Web的數(shù)據(jù)庫管理功能,為管理員提供了方便,同時(shí)也為郵件用戶提供了基于Web的郵件服務(wù)功能。
1 電子郵件系統(tǒng)的構(gòu)建
1.1 電子郵件收發(fā)機(jī)制 電子郵件傳輸過程為,當(dāng)終端用戶發(fā)送一封電子郵件時(shí),首先試圖去尋找一個(gè)信件傳輸代理,把郵件提交給它,信件傳輸代理得到了郵件后將它保存在自身的緩沖隊(duì)列中,然后根據(jù)郵件的目標(biāo)地址,通過對DNS進(jìn)行查詢,搜索到對應(yīng)這個(gè)目標(biāo)地址的郵件傳輸代理服務(wù)器的IP地址,并通過網(wǎng)絡(luò)將郵件傳送給郵件傳輸代理服務(wù)器。對方的郵件傳輸代理服務(wù)器接收到郵件之后,將其緩沖存儲在本地,并通過投遞代理將郵件分發(fā)至最終用戶的郵箱,電子郵件的接收者通過用戶代理查看自己的電子信箱。不管是發(fā)送過程還是接收過程,電子郵件的傳輸都要遵循SMTP、POP3、IMAP協(xié)議,這些協(xié)議確保了電子郵件在各種不同系統(tǒng)之間的傳輸。
1.2 電子郵件系統(tǒng)開發(fā)平臺相關(guān)分析 Linux由于自身的特性[2],能夠?yàn)槲覀兲峁┳罴褢?yīng)用和開發(fā)環(huán)境,也給硬件平臺的選擇提供了很大的自由空間。基于Limix的這些優(yōu)越性,我們選用Linux操作系統(tǒng)作為軟件平臺來開發(fā)Webmail系統(tǒng)。Linux中的電子郵件系統(tǒng)包括兩個(gè)組件:MUA(Mail User Agent 郵件用戶代理)和MTA(Mail Transport Agent 郵件傳送代理)。MUA是郵件系統(tǒng)為用戶提供的可以讀寫郵件的界面;而MTA運(yùn)行在底層,能夠處理郵件的收發(fā)工作。即用戶可以通過MUA寫信、讀信,而通過MTA收信、發(fā)信。在Linux環(huán)境下有許多不同類型的MTA程序,當(dāng)前比較流行MTA系統(tǒng)有Sendmail、qmail、Smail。這里采用qmail作為基本服務(wù)器軟件,使用maildir作為郵件存儲格式。由于vPopmail提供了大量的命令,方便建立和管理獨(dú)立于系統(tǒng)用戶的郵件用戶以及對軟、硬磁盤空間限額的管理。因此在qmail的基礎(chǔ)上,我們選用vpoomail來增強(qiáng)系統(tǒng)的虛擬域功能。數(shù)據(jù)庫的開發(fā)我們選用Mini SQL,它是種小型的關(guān)系數(shù)據(jù)庫,性能不是太好,對SQL語言的支持也不夠完全,但由于它的短小精悍,非常適合嵌入式數(shù)據(jù)庫和網(wǎng)絡(luò)數(shù)據(jù)庫的應(yīng)用開發(fā)。
2 qmail郵件軟件機(jī)制
2.1 qmail軟件結(jié)構(gòu) qmail系統(tǒng)是由一系列子程序組成的,這些子程序可分為兩類:可執(zhí)行程序和使用工具程序。qmail系統(tǒng)在運(yùn)行時(shí),有五個(gè)可執(zhí)行程序在后臺運(yùn)行。這五個(gè)程序分別為:qmail-send、qmail-ISpawn、qmail rSPawn、qmail clean、splogger。qmail-send程序嘗試投送qmail隊(duì)列里的郵件消息;qmail-lspawn程序一般被qmail-Send程序調(diào)用向qmaill-local程序轉(zhuǎn)發(fā)消息;qmail-rspawn程序被qmail-send程序調(diào)用向qmail-remote轉(zhuǎn)發(fā)消息;qmail-clean程序?qū)⒂肋h(yuǎn)無法投遞的消息從qmail隊(duì)列中移出;splogger程序?qū)⑾⒉迦胂到y(tǒng)登錄程序中。這五個(gè)程序相互協(xié)調(diào)工作,共同控制qmail系統(tǒng)的郵件收發(fā)工作。
2.2 qmail收發(fā)郵件機(jī)制 從電子郵件的來源來看可分為兩類:來自遠(yuǎn)端用戶的郵件和本地用戶的郵件。在qmail系統(tǒng)中,qmail-smtpd程序負(fù)責(zé)接收來自遠(yuǎn)端用戶的郵件消息,并將它們傳遞給qmail-queue程序處理。遠(yuǎn)端用戶的郵件消息是采用SMTP協(xié)議進(jìn)行傳輸?shù)?,qmail-smtpd必須時(shí)刻準(zhǔn)備接收來自網(wǎng)上的消息。qmail系統(tǒng)采用了一個(gè)網(wǎng)絡(luò)輔助程序Inetd來監(jiān)控IP連接,當(dāng)一個(gè)SMTP連接嘗試被檢測時(shí),Inetd自動(dòng)地啟動(dòng)qmail-smtpd程序并將該IP連接的控制權(quán)交給該程序去處理。qmail-inject程序用來接收本地產(chǎn)生的郵件消息。郵件消息被接收后傳遞給qmail-queue程序,qmail-queue程序?qū)⑧]件放入郵件隊(duì)列中。一旦消息被成功的放入到郵件隊(duì)列中,就調(diào)用qmail-send程序來處理它。qmail-send檢查郵件隊(duì)列中每個(gè)消息的狀態(tài),通過對前一次郵件請求失敗的消息的識別,判斷它們是處于臨時(shí)的投送失敗狀態(tài)還是永久的投送失敗狀態(tài)。臨時(shí)投送失敗狀態(tài)下的郵件消息將會被再次投送,永久投送失敗狀態(tài)下的郵件消息將被傳遞給qmail-dean程序,qmail-clean程序?qū)⑦@些郵件清除。
相對于郵件服務(wù)器來說,qmail-send將接收方被指定為本地的郵件都傳遞給qmail-lspawn程序,被指定為遠(yuǎn)程郵件服務(wù)器的郵件消息都傳遞給qmail-rsPawn程序。qmail-rspawn程序?yàn)槊總€(gè)郵件消息決定下一個(gè)目的郵件服務(wù)器,然后激活qmail-remote程序?qū)⑧]件進(jìn)行一次轉(zhuǎn)發(fā)。qmail-rspawn把本地郵件接收后調(diào)用qmail-local程序檢測郵件消息的頭字段,根據(jù)頭字段中的delivered-to的信息,qmail-loeal將郵件分發(fā)到相應(yīng)的郵箱中。
2.3 qmail郵件管理機(jī)制 qmail有三種方法能夠用來管理那些發(fā)給本地郵件服務(wù)器上用戶的郵件消息:現(xiàn)有本地郵件方法、Mailbox方法和Maildir方法。本地郵件存儲方法使用一個(gè)公共的目錄,該目錄中有許多獨(dú)眾的用戶文件,每一個(gè)都用來存儲發(fā)送給該本地用戶的郵件消息。Mailbox方法將所有的郵件消息都存放到一個(gè)普通的郵件目錄中,這個(gè)常見的郵件目錄通常位于以下兩個(gè)位置之一:/var/spool/mail或者/var/mail。第三種郵件管理方法是Maildir方法,這種方法不僅每個(gè)用戶的郵箱被放置到他的目錄中,連標(biāo)準(zhǔn)的UNIX郵箱格式也被改變了,用戶消息被作為獨(dú)立的文件以特定的格式存儲在用戶郵箱目錄中。這樣確保了即使一個(gè)消息損壞了,該郵箱目錄內(nèi)剩余的其他郵件消息仍然安全可靠。
3 結(jié)論
隨著電子郵件的普及,人們逐漸將電子郵件應(yīng)用到一些正式場合,其安全問題也得到了越來越多的使用者和安全開發(fā)人員的重視。本文在說明郵件系統(tǒng)收發(fā)及傳輸原理基礎(chǔ)上,對于基本郵件軟件qmail的收發(fā)機(jī)制進(jìn)行詳細(xì)的闡述,為實(shí)現(xiàn)基于Web的郵件服務(wù)系統(tǒng)奠定基礎(chǔ)。
參考文獻(xiàn):
[1]張良勝,蔣建中,陳金陽等.Web郵件客戶端程序的設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)應(yīng)用與軟件.2006年10期.
[2]黃武陵,何小慶,艾云峰.嵌入式Linux實(shí)時(shí)化技術(shù)[J].電子產(chǎn)品世界.2009年02期.