深入了解 Qmail的工作原理和配置文件(1)


在文章里,我们主要是介绍qmail的工作原理和配置文件的设置。通过这一节,让我们

更好的分析问题和设施qmail。来帮助大家更好的了解和融入到Qmail

1 qmail是什么?

qmail包是在unix系统上的一个邮件程序。qmail程序是由dan bernstein开发出来的

为标准的unix服务器提供邮件传输代理的(mail transfer agent,mta)功能的,用来替代sendmail。qmail因特网主页http://www.qmail.org。

2 qmail和相关的服务

qmail提供了mta功能,但是客户要能看到自己的信件,还需要其他协议和软件。两种

常见的远程用户取回他们消息的机制是邮政协议(post office protocal,pop3)和互交邮件访问协议(interactive mail access protocol,imap)。

综述:

qmail系统包括几个可执行程序、配置文件、qmail工具和环境变量,这些彼此互相影响,共同提供邮件服务。

3 qmail投递邮件进程流程

qmail系统中有9个核心程序,这里简单的介绍一下。qmail-smtpd负责接收来自远程主机的邮件消息并将它们传送给qmail-queue处理。qmail-inject程序是用来接收本地产生的邮件消息并传送给qmail-queue程序。qmai-queue程序处理他们发来的邮件,移进邮件队列以便发送。一旦消息被成功的放在邮件队列中,就调用qmail-send程序来处理他。qmail-send检查邮件队列中每一个消息状态,前一次邮件请求失败的消息被识别,并决定它是临时失败还是永久的,临时失败会再次投递,永久失败将被送递到qmail-clean程序,被删除掉。也就是说,qmail-clean实用来清除永久失败的的邮件消息的。

qmail-send调用了qmail-lspawn 和qmail-rspawn程序。qmail-send判断邮件是发给谁的,发给本地的,就交给qmail-lspawn程序,再由qmail-local投送到本地邮件服务器。要是确定为远程主机,就调用qmail-rspawn程序,qmail-rspawn为每一个邮件消息的接受方决定目的的邮件服务器,再调用qmail-remote程序发送。

2.2qmail的进程

qmail-send

splogger qmail

qmail-lspawn

qmaiil-rspawn

qmail-clean

qmail在任何时候都要求有五个程序在后台运行。这些核心的程序允许qmail扫描新邮件,并将他们发送到适当的目的地。

4 qmail实用工具程序

除了以上五个qmail进程外,进程和本地用户在处理和传输消息的过程中,都还会用到几个其他的qmail实用工具程序。如下:

bouncesaying 允许用户将消息转发给程序或者程序不可用时反弹回信息

condredirect 允许用户将消息转发给程序,然后把消息转发到另一个地址

except 过去常用来修改一个调用程序的退出编码

forward 将消息转发给一个备用的邮件地址

maildir2mbox 将在maildir格式邮箱中的消息转换到一个标准的sendmail邮箱中

maildirwatch 产生一个maildir格式的邮箱

maildirwatch 监控一个用户的邮件目录并报告所有的新消息

preline 在将消息转发给相关程序前预处理这些消息

qbiff 当新消息到达后向用户终端显示器上写一个通知

qmail-clean 从qmail邮件队列中永远的移出无法到达的消息

qmail-inject 将新消息插入到qmail邮件队列中

qmail-local 向本地邮件系统上的用户投递消息

qmail-lspawn 由qmail-send调用以便向qmail-local程序转发消息

qmail-newmrh 用来从morercpthosts文件中创建qmail数据库

qmail-newn 从一个包含系统用户名和邮件名的ASCII文件表建立一个qmail用户文件

qmail-pop3d 接受pop3连接以便让用户阅读他们的邮箱

qmail-popup 用来验证pop3连接中的用户ID和密码

qmail-pw2u 将UNIX系统的用户id和密码转换成qmail-newn能用的一个表结构

qmail-qmtpd 接受远程主机发来的qmtp连接请求

qmail-qread 产生一个显示当前qmail邮件队列里消息的报告

qmail-qstat 产生一个报告来显示当前处在qmail投送状态下等待发送的消息数目

qmail-queue 将邮件消息排队等待投送

qmail-remote 将消息投送给远程邮件用户

qmail-rspawn 由qmail-send调用来向qmail-remote转发消息

qmail-send 尝试投送qmail邮件队列里的邮件消息

qmail-showctl 显示当前的qmail系统配置情况

qmail-smtpd 接收来自远程主机的smtp连接请求

qmail-start 初始化qmail的启动脚本

qmail-tcpok 用来清空qmail-remote中用到的tcp超时记录表

qmail-tcpto 显示当前的tcp超时记录表

qreceipt 用来会应对要求受到进行确认的消息

sendmail 用来将sendmail程序的功能复制到mta程序中

splogger 将消息插入系统登陆程序中

tcp-env 将网络连接的信息转换成unix环境变量

每一个qmail实用工具程序都在正确的处理和投递邮件消息中扮演不同的脚色。其中有一些只能qmail内核程序调用,其他的就可以由qmail的系统管理员用来处理消息并得到统计信息。还有一些可以被单个普通邮件用户来制定自己的邮件消息处理。

5 qmail环境变量

除了控制文件之外,qmail程序还能使用unix环境变量来控制他们的动作。多数的控制文件的值都能被一个相应设定的环境变量重载。如果该环境变量没有设定,就使用控制文件的值。qmail的环境变量是在qmail程序运行前就被设置好的。这是由一个包装程序完成的。常见的是tcpwrapper和tcpserver。本文就是用的tcpserver。在以后的《(四)ucspi-tcp的原理和设置》内容中,再详细讨论。


相关内容