浅析基于Linux邮件系统关键技术分析

(整期优先)网络出版时间:2009-03-13
/ 2

浅析基于Linux邮件系统关键技术分析

余静芬

关键词:LinuxqmailWeb邮件系统嵌入式数据库

0引言

由于电子邮件不受时间、空间的限制,其成为最基本、最普及、最方便的网络通讯功能。目前,由于电子邮件收发系统本身存在着若干漏洞,其中最引人注目的是接收大量的垃圾邮件与黑客利用电子邮件进行的病毒(如木马)入侵,这些都需要靠人工处理。把E-mail和Web技术结合起来,通过Web编程和适当的系统设置,使用户只需要访问Web就可以得到和使用完整的邮件服务,我们把这种系统称为webmail[1]。本文就基本邮件服务器的构建技术进行相关分析,提供基于Web的数据库管理功能,为管理员提供了方便,同时也为邮件用户提供了基于Web的邮件服务功能。

1电子邮件系统的构建

1.1电子邮件收发机制电子邮件传输过程为,当终端用户发送一封电子邮件时,首先试图去寻找一个信件传输代理,把邮件提交给它,信件传输代理得到了邮件后将它保存在自身的缓冲队列中,然后根据邮件的目标地址,通过对DNS进行查询,搜索到对应这个目标地址的邮件传输代理服务器的IP地址,并通过网络将邮件传送给邮件传输代理服务器。对方的邮件传输代理服务器接收到邮件之后,将其缓冲存储在本地,并通过投递代理将邮件分发至最终用户的邮箱,电子邮件的接收者通过用户代理查看自己的电子信箱。不管是发送过程还是接收过程,电子邮件的传输都要遵循SMTP、POP3、IMAP协议,这些协议确保了电子邮件在各种不同系统之间的传输。

1.2电子邮件系统开发平台相关分析Linux由于自身的特性[2],能够为我们提供最佳应用和开发环境,也给硬件平台的选择提供了很大的自由空间。基于Limix的这些优越性,我们选用Linux操作系统作为软件平台来开发Webmail系统。Linux中的电子邮件系统包括两个组件:MUA(MailUserAgent邮件用户代理)和MTA(MailTransportAgent邮件传送代理)。MUA是邮件系统为用户提供的可以读写邮件的界面;而MTA运行在底层,能够处理邮件的收发工作。即用户可以通过MUA写信、读信,而通过MTA收信、发信。在Linux环境下有许多不同类型的MTA程序,当前比较流行MTA系统有Sendmail、qmail、Smail。这里采用qmail作为基本服务器软件,使用maildir作为邮件存储格式。由于vPopmail提供了大量的命令,方便建立和管理独立于系统用户的邮件用户以及对软、硬磁盘空间限额的管理。因此在qmail的基础上,我们选用vpoomail来增强系统的虚拟域功能。数据库的开发我们选用MiniSQL,它是种小型的关系数据库,性能不是太好,对SQL语言的支持也不够完全,但由于它的短小精悍,非常适合嵌入式数据库和网络数据库的应用开发。

2qmail邮件软件机制

2.1qmail软件结构qmail系统是由一系列子程序组成的,这些子程序可分为两类:可执行程序和使用工具程序。qmail系统在运行时,有五个可执行程序在后台运行。这五个程序分别为:qmail-send、qmail-ISpawn、qmailrSPawn、qmailclean、splogger。qmail-send程序尝试投送qmail队列里的邮件消息;qmail-lspawn程序一般被qmail-Send程序调用向qmaill-local程序转发消息;qmail-rspawn程序被qmail-send程序调用向qmail-remote转发消息;qmail-clean程序将永远无法投递的消息从qmail队列中移出;splogger程序将消息插入系统登录程序中。这五个程序相互协调工作,共同控制qmail系统的邮件收发工作。

2.2qmail收发邮件机制从电子邮件的来源来看可分为两类:来自远端用户的邮件和本地用户的邮件。在qmail系统中,qmail-smtpd程序负责接收来自远端用户的邮件消息,并将它们传递给qmail-queue程序处理。远端用户的邮件消息是采用SMTP协议进行传输的,qmail-smtpd必须时刻准备接收来自网上的消息。qmail系统采用了一个网络辅助程序Inetd来监控IP连接,当一个SMTP连接尝试被检测时,Inetd自动地启动qmail-smtpd程序并将该IP连接的控制权交给该程序去处理。qmail-inject程序用来接收本地产生的邮件消息。邮件消息被接收后传递给qmail-queue程序,qmail-queue程序将邮件放入邮件队列中。一旦消息被成功的放入到邮件队列中,就调用qmail-send程序来处理它。qmail-send检查邮件队列中每个消息的状态,通过对前一次邮件请求失败的消息的识别,判断它们是处于临时的投送失败状态还是永久的投送失败状态。临时投送失败状态下的邮件消息将会被再次投送,永久投送失败状态下的邮件消息将被传递给qmail-dean程序,qmail-clean程序将这些邮件清除。

相对于邮件服务器来说,qmail-send将接收方被指定为本地的邮件都传递给qmail-lspawn程序,被指定为远程邮件服务器的邮件消息都传递给qmail-rsPawn程序。qmail-rspawn程序为每个邮件消息决定下一个目的邮件服务器,然后激活qmail-remote程序将邮件进行一次转发。qmail-rspawn把本地邮件接收后调用qmail-local程序检测邮件消息的头字段,根据头字段中的delivered-to的信息,qmail-loeal将邮件分发到相应的邮箱中。

2.3qmail邮件管理机制qmail有三种方法能够用来管理那些发给本地邮件服务器上用户的邮件消息:现有本地邮件方法、Mailbox方法和Maildir方法。本地邮件存储方法使用一个公共的目录,该目录中有许多独众的用户文件,每一个都用来存储发送给该本地用户的邮件消息。Mailbox方法将所有的邮件消息都存放到一个普通的邮件目录中,这个常见的邮件目录通常位于以下两个位置之一:/var/spool/mail或者/var/mail。第三种邮件管理方法是Maildir方法,这种方法不仅每个用户的邮箱被放置到他的目录中,连标准的UNIX邮箱格式也被改变了,用户消息被作为独立的文件以特定的格式存储在用户邮箱目录中。这样确保了即使一个消息损坏了,该邮箱目录内剩余的其他邮件消息仍然安全可靠。

3结论

随着电子邮件的普及,人们逐渐将电子邮件应用到一些正式场合,其安全问题也得到了越来越多的使用者和安全开发人员的重视。本文在说明邮件系统收发及传输原理基础上,对于基本邮件软件qmail的收发机制进行详细的阐述,为实现基于Web的邮件服务系统奠定基础。

参考文献:

[1]张良胜,蒋建中,陈金阳等.Web邮件客户端程序的设计与实现[J].计算机应用与软件.2006年10期.

[2]黄武陵,何小庆,艾云峰.嵌入式Linux实时化技术[J].电子产品世界.2009年02期.