打印

(三)qmail邮件系统qmail的工作原理和配置文件的设置

qmail邮件系统(三)qmail的工作原理和配置文件的设置

前言
    在这章里,我们主要是介绍qmail的工作原理和配置文件设置。通过这一节,让我们
更好的分析问题和设施qmail。
3.1 qmail是什么?
qmail包是在unix系统上的一个邮件程序。qmail程序是由dan bernstein开发出来的
为标准的unix服务提供邮件传输代理的(mail transfer agent,mta)功能的,用来替代sendmail。qmail因特网主页http://www.qmail.org。

TOP

3.2 qmail和相关的服务
qmail提供了mta功能,但是客户要能看到自己的信件,还需要其他协议和软件。两种
常见的远程用户取回他们消息的机制是邮政协议(post office protocal,pop3)和互交邮件访问协议(interactive mail access protocol,imap)。
综述:
qmail系统包括几个可执行程序、配置文件、qmail工具和环境变量,这些彼此互相影响,共同提供邮件服务。

TOP

3.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程序发送。

TOP

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

TOP

3.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的系统管理员用来处理消息并得到统计信息。还有一些可以被单个普通邮件用户来制定自己的邮件消息处理。

TOP

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

TOP

3.6 qmail控制文件
这一部,对于管理好qmail,非常重要的。控制文件是qmail配置中的中心环节,它控制了qmail的操作性为。它位于/var/qmail/control目录下。每一个文件包含一个值,这个值定义了相应的qmail可执行程序的变量。qmail控制文件是定义了qmail参数的ASCII文本文件。大多数控制文件要求一个单一的文本值,该值可以在一行中输入。也有一些控制文件能包含多个值。在这种情况下,每一个值被输入到单独的一行中,每一行以一个标准的UNIX换行符(LF)结尾。还有一个要重点注意,就是控制文件的权限问题,推荐root可读写,其他只读。
#chmod 644  /var/qmail/control/*

TOP

以下将逐一介绍个控制文件:
--------  badmailfrom     
这个控制文件实现拒收邮件功能的,每一个地址遵循前面说的规则,要单独一行。而且,不用重起qmail就能生效。  
例如:
peng@96633.net    -----限制一个特定的用户
@jp.yahoo.com     -----限制一台远程主机上的所有主机上的所有用户
@sina.com         ----限制整个域中的邮件
------  bouncefrom
  用来定义用户名的,该用户名是出现在那些被退回给原始发件人的消息中,一般都是永久的投递失败消息。Bouncefrom默认值是MAILER-DAEMON,它通常是一个虚拟用户名,是一个真实用户的别名。你要是想给用户的退信消息中用另一个名字,可以用一下命令:
# echo postmaster >; /var/qmail/control/bouncefrom  ---给改为postmaster,我习惯的。
-------  bouncehost
  制定了退信消息中的主机名,默认的值是me文件的主机名。
--------  concurrencylocal
  定义了qmail能够同时运行的本地投送进程数。对于大型的邮件主机,非常重要。他的默认参数是10。就是允许多达10个本地邮件投递进程同时运行。这个控制文件的最大值是由qmail源代码中的conf-spawn变异参数设置的,这个编译参数默认值是120,他的最大值是255。

TOP

--------   concurrencyremote
  定义了qmail可以同时运行的远程投递进程数,默认值是20。它也是由conf-spawn设置的,默认值是120,最大可设255。但是要根据你的实际情况,因为运行进程要需要内存和硬盘的,设太大了小心你的服务器负载!
-------   defaultdomain
   默认域名,如果给本地的邮件用户发信,没有加上域名,qmail-inject会给他添加defaultdomain文件中的域名。如果设置了QMAILDEFAULTDOMAIN环境变量,他就会重载defaultdomain控制文件的值。
---------  defaulthost
  默认主机名,同一邮件服务器上,给本地用户发邮件,如果收信的用户地址没加域名,就会添加主机名。例如:邮件主机mail.chinaunix.net,给本地用户peng@rchinaunix.net发邮件,from:peng ,那么qmail就会给这个消息扩充为peng@mail.chinaunix.net,qmail-send识别更容易了。通常,大家希望只看到域名@chinaunix.net,不看到主机名@mail.chinaunix.net,因而qmail就只让你看到了域名。
------databytes
  定义由qmail-smtpd接受到的邮件消息所允许的最大字节数,也就是发送和接受邮件的大小(本机上给本机用户出发和接受除外)。就是说,远程邮件主机和你用outlook、foxmail等远程的mua工具发信,都受他的限制。默认值是0,表示不限制。无法理解的是,默认没有这个文件,一定要加上。假想以下,有个电信的哥们给你使坏,在骨干网机房,写个定时任务,没事就给你发几个100m的信件,嘿嘿。。。
# echo 10000000 >;/var/qmail/control/databyte   ---设置为10m,超过10m,将得到code 552,告知:其邮件大小超出了该邮件主机所能容忍的限度
----  doublebouncehost
  用来为那些经历了两次反弹后的消息指定主机名。默认是me文件的值
----  doublebounceto
  用来为那些经历了两次反弹后的消息指定用户名,默认是postmaster。

TOP

----  envnoathost
   是qmail-send用来为没有指定主机名的邮件接受方指定他的主机名的,默认是没有这个控制文件的,qmail-send使用me文件定义的
----  helohost
   指定在qmail-remote与远程邮件服务器的smtp会话中用到的主机名。如果helohost控制文件没有给出,qmail-remote使用me文件的值。
----  idhost
  指定了用来在消息中产生message-ID:头字段得主机名,默认qmail-inject用me文件的值。
----  localiphost
  用来为邮件消息指定本地地址的,内容是邮件主机的ip地址。但是它用在dns上就会有问题。建议不要设置。
----  locals
  指定邮件本地地址,不存在,qmail-send就假定me文件的值为邮件主机的唯一可用本地邮件主机。
----  me
  用来指定本地邮件服务器的主机名,最重要的控制文件,如果没有,qmail将不会运行。
me控制文件通常是靠运行qmail配置子目录下的config脚本文件来建立的,config脚本自动判断邮件服务器的dns域名,并产生一个适当的控制文件(me ,locals,rcpthhosts)。如果某种原因你的邮件服务器无法连通dns服务器,可以手工运行configfast来指定邮件服务器主机名:
# /var/qmail/configure/config-fast mail.chinaunix.net

TOP


感谢一直以来您对我们的支持!
当前时区 GMT+8, 现在时间是 2008-10-12 22:19 京ICP证060528 号

Designed By 17DST