前言
sendmail的功能是足够强大的,然而它的配置和管理也是十分复杂的。有另一个也很常用的邮件服务程序称为qmail。
需要注意的是,许多人认为qmail要比sendmail简单一些。就笔者个人的感觉,不能同意这种说法。但是,qmail在配置一些稀奇古怪的功能方面确实比sendmail要稍微容易一 些。另外qmail与sendmail不同之处在于,缺省的时候qmail将在用户的宿主目录中存储邮件,而不是像sendmail那样不分青红皂白地放在/var/spool/mail下面,并且qmail不 需要使用文件锁定,所以可以把用户邮件放在nfs服务器上,这样,可以使用多台服务器 来提供服务。对于大型邮件系统这是很重要的。(在sendmail也可以这样做,但必须非 常小心以免造成邮件丢失)。但是这个功能虽然不错,却又产生了一些十分讨厌的后果 。对于大型的isp,qmail也很重要,它可以简化虚拟域的设置。我们将试图介绍如何用 qmail构造一个邮件服务器。当然,这里的介绍不可能像介绍sendmail那样细致,如果要 使用一些比较高级的功能,你也许必须研究qmail的文档。
软件包:
qmail-1.03 qmail基本系统。在http://em.ca/~bruceg/qmail+patches/上有一个好的补丁包,里面有若干针对qmail的pop3d及其他问题的补丁,笔者建议您把它下载过来。
ucspi-tcp-0.88 tcpsever服务程序
daemontools-0.70 监视工具
checkpassword-0.81 pop3验证用户的程序
ezmlm-0.53 邮件转发
vpopmail-4.9.6-1 虚拟域用户pop3支持
qmailadmin-0.35 虚拟域web管理
autorespond-1.0.0 自动回复程序
sqwebmail-1.2.0 webmail
vqsignup-0.4 web方式用户注册
软件来源:
http://www.qmail.org
http://www.inter7.com/qmail
每个包安装前务必先仔细阅读install和faq,很多问题在faq都有解决方法。
安装步骤:
1. #mkdir /var/qmail
2.设定组、用户权限
# groupadd nofiles
# useradd -g nofiles -d /var/qmail/alias alias
# useradd -g nofiles -d /var/qmail qmaild
# useradd -g nofiles -d /var/qmail qmaill
# useradd -g nofiles -d /var/qmail qmailp
# groupadd qmail
# useradd -g qmail -d /var/qmail qmailq
# useradd -g qmail -d /var/qmail qmailr
# useradd -g qmail -d /var/qmail qmails
3.
#tar xzvf qmail-1.03.tar.gz
进入qmail目录后,仔细阅读一下readme和install文件.然后开始编译qmail
#make setup check
4. #cd qmail-1.03
#./config
5.建立系统别名
# (cd ~alias; touch .qmail-postmaster .qmail-mailer-daemon .qmail-root)
# chmod 644 ~alias/.qmail*
6.
# cp /var/qmail/boot/home /var/qmail/rc
# chmod 755 /var/qmail/rc
编辑 /var/qmail/rc
修改其中 ./mailbox 成为 ./maildir ,如下:
# !/bin/sh
# using splogger to send the log through syslog.
# using qmail-local to deliver messages to ~/maildir by default.
exec env - path="/var/qmail/bin:$path"
qmail-start ./maildir splogger q
其中 splogger qmail 指令是用来将纪录文件纪录于 / 中。
建立样板
$ /var/qmail/bin/maildirmake /etc/skel/maildir
$ echo ./maildir/ > ~/.qmail
注意 maildir 必须为该使用者所有,可以 chown 变更,并以 chmod 700 maildir 设定权限。
7.安装 ucspi-tcp-0.88
# tar zxvf ucspi-tcp-0.88.tar.gz
# cd ucspi-tcp-0.88
# make
# make setup check
执行档将被安装于 /usr/local/bin 中。
8.安装 checkpassword
# tar zxvf checkpassword-0.81.tar.gz
# cd checkpassword-0.81
# make
# make setup check
# chmod og-rx /bin/checkpassword
执行档 checkpassword 将被安装于 /bin 中如果不对/etc/passwd中的用户开放mail,不需要装checkpassword,只要装vpopmail
9.安装 daemontools
# tar zxvf daemontools-0.70.tar.gz
# cd daemontools-0.70
# make
# make setup check
执行档将安装于 /usr/local/bin 中。安装本工具后可以用
# mkdir /var/run/qmail
# supervise /var/run/qmail /var/qmail/rc
来启动qmail,可以用svc来关闭活重起qmail,用svstat监视qmail运行情况,(qmail faq)
10.安装 vpopmail
# groupadd vchkpw
# useradd -g vchkpw vpopmail
# mkdir ~vpopmail/etc
# echo ":allow" > ~vpopmail/etc/tcp.smtp
# tar zvfz vpopmail-4.9.6-1.tar.gz
# cd vpopmail-4.9.6-1
# ./configure --enable-roaming-users=y --enable-default-domain=mydomain.com --enable-passwd=n
# make
# make install-strip
# crontab -e
40 * * * * /home/vpopmail/bin/clearopensmtp 2>&1 > /dev/null
# cd /home/vpopmail/bin
# ./vadddomain mydomain.com mydomain
append mydomain.com to /var/qmail/control/rcpthosts
11.从sendmail向qmail迁移
如果你的系统以前安装使用着sendmail,就需要进行下面的步骤:
11.1.首先找到sendmail的启动程序,一般是在/etc/rc.d目录中,看上去像这样的命令:“sendmail -bd -q15m”,将其注释掉。
11.2. 杀掉sendmail进程。如果sendmail有子进程,可以反复用-stop和-cont信号杀,直到没有子进程后用-term后加-cont杀就可以了。
11.3. 检查e-mail队列中是否还有信,如果认为有必要将它们发送出去,可以在以后一段时间不定期地运行“sendmail.bak -q”,直到队列清空。
11.4. 去掉sendmail等文件的setuid bit:
# chmod 0 /usr/lib/sendmail
# chmod 0 /usr/sbin/sendmail
# chmod 0 /usr/lib/sendmail.mx
# mv /usr/lib/sendmail /usr/lib
/sendmail.bak
# mv /usr/sbin/sendmail /usr
/sbin/sendmail.bak
11.5. 将csh -cf ′/var/qmail/rc &&′添加到启动文件中去。
11.6. 安装qmail的sendmail外壳:
# ln -s /var/qmail/bin/sendmail /usr/lib/sendmail
# ln -s /var/qmail/bin/sendmail /usr/sbin/sendmail
11.7. 虚拟域与虚拟用户。
将虚拟域名加入/var/qmail/
control/local和/var/qmail/control/rcpthosts 。然后在/var/
qmail/control/virtualdomains中加入your.virtual.domains:youracct。
这样,所有发往me@your.virtual.domains的邮件都将以youracct-me@your.virtual.domains的形式发给youracct。vmailmgr是一个qmail的增强工具,它扩展了qmail的口令验证功能,使用户可以通过pop3 及imap访问自己的虚拟邮箱,我们将在以后的内容中重点介绍vmailmgr。
12.激活qmail smtp , pop3 daemon 系统服务
建立 smtp 转信规则
建立 /etc/tcp.smtp 内容为
:allow
此为接受任何client端所发出之转送信件
若要拒绝某些ip所发出之relay则改为 /etc/tcp.smtp如下
1.2.3.4:allow,relayclient=""
127.:allow, relayclient=""
如此,除1.2.3.4及127.*之外的所有地址,都将被拒绝转送信件。
接下来,转换 tcp.smtp 成为 cdb 格式。
# /usr/local/bin/tcprules /etc/tcp.smtp.cdb /etc/tcp.smtp.tmp < /etc/tcp.smtp
注意:若对 tcp.smtp 有任何变更,都必须经过 tcprules 转换成为 cdb 才会生效。另外,tcp.smtp 若为空白,则表示拒绝所有的转送,因为预设的规则为 deny。至此,转送规则已建立,稍后将依此规则激活 qmail-smtpd。
设定 smtp 及 pop3 daemon 之激活
请移除 .netd.conf 中有关 smtp 及 pop3 的设定 (加上 # 号)
编辑 /etc/services,改为以下设定:
smtp 25/tcp mail
# pop-3 110/tcp #pop version 3
# pop-3 110/udp
pop3 110/tcp
pop3 110/udp
激活 smtp:
/usr/local/bin/tcpserver -v -x /etc/tcp.smtp.cdb
-u uid -g gid 0 smtp /var/qmail/bin/qmail-smtpd 2>&1
/var/qmail/bin/splogger smtpd 3 &
其中uid和gid为前述新增 qmail 系统帐号之 qmaild 之 user id,以及 nofiles 之 group id。
/var/qmail/bin/splogger那一行会将log档写在 /var/log/maillog。
激活 pop3:
编辑激活档加入以下设定:
tcpserver -h -r 0 pop3
/var/qmail/bin/qmail-popup mail.mydomain.com
/home/vpopmail/bin/vchkpw /var/qmail/bin/qmail-pop3d maildir &
在/etc/rc.d/init.d下建立文件qmail,内容如下:
-------------------------------------------
#! /bin/sh
case "$1" in
start)
echo -n "start qmail:"
/var/qmail/rc &
echo "."
echo -n "start smtp service:"
/usr/local/bin/tcpserver -v -x /etc/tcp.smtp.cdb
-u uid -g gid 0 smtp /var/qmail/bin/qmail-smtpd 2>&1
/var/qmail/bin/splogger smtpd 3 &
echo "."
echo -n "start pop3 service:"
tcpserver -h -r 0 pop3
/var/qmail/bin/qmail-popup mail.mydomain.com
/home/vpopmail/bin/vchkpw /var/qmail/bin/qmail-pop3d maildir &
echo "."
;;
stop)
echo -n "stop qmail:"
echo "."
;;
*)
exit 1
;;
esac
exit 0
-----------------------------------------------------
# cd ../rc3.d
# ln -s ../init.d/qmail s98qmail
13.qmailadmin web方式管理qmail
13.1安装 ezmlm
进入ezmlm目录以后:
$ make
$ make man
# make setup
13.2安装 autorespond
进入autorespond所在目录
gcc -wall -o autorespond autorespond.c
cp autorespond /usr/local/bin/autorespond
13.3安装 qmailadmin
准备工作,请注意
a. 你是否已经安装了vpopmail并使用 vchkpw
b. web服务器的cgi目录位置
c. ezmlm所在目录位置
d. autorespond 所在位置
确认以上的工作都已完成,可以开始安装qmailadmin
13.2 安装
# ./configure
# make
# make install-strip
浏览器中打开路径http://mail.mydomain.com/cgi-bin/qmailadmin。 用户postmaster;域mydomain.com;口令:mydomain
14.一个webmail程序-sqwebmail的安装
# tar xvfz sqwebmail-1.2.0.tar.gz
# cd sqwebmail-1.2.0
# ./configure --without-authpam --without-authuserdb --enable-webpass=no --without-authpwd --without-authshadow
# make configure-check
# make (当我make的时候报错找不到db.h,cp /usr/include/db1/db.h /usr/include/db.h)
# make check
# make install-strip
# make install-configure
浏览器中打开路径http://mail.mydomain.com/cgi-bin/sqwebmail
15.vqsignup
# tar xvfz vqsignup-0.4.tar.gz
# cd vqsignup-4.0
编译安装
15.1修改makefile
a) flags=-i/home/vpopmail/include
修改该行,指向你的系统中vpopmail的include目录的路径
b) 修改编译行:
$(cc) $(flags) -o $(bin) $(objs) -l/home/vpopmail/lib -lvpopmail - lcrypt
修改该行中-l/home/vpopmail/lib为你系统中vpopmail的链结库所在目录的路径.若你的系统使用了mysql、ldap,sybase或oracle,则需要添加-l及-l参数相关内容,例如系统使用了mysql数据库则需要修改为:
$(cc) $(flags) -o $(bin) $(objs) -l/usr/lib/mysql/lib lmysqlclient
-l/home/vpopmail/lib -lvpopmail -lcrypt
这里/usr/lib/mysql/lib是我的mysql的动态链结库所在路径,mysqlclient是需要的动态链结库。
15.2 编译
make
15.3 安装配置
a) 拷贝vqsignup.cgi到apache服务器的cgi-bin目录
b) 修改vqsignup.cgi的用户,组及访问权限,进入cgi-bin目录:
chown vpopmail vqsignup.cgi
chgrp vchkpw vqsignup.cgi
chmod ug+s vqsignup.cgi
c) 拷贝vqsignup.conf到cgi-bin目录,确保其可被所有用户可读
chmod ugo+r vqsignup.conf
d) 拷贝vqsignup_html到cgi-bin目录,并确保该文件是所有用户可读的
e) 拷贝vqsignup.html到documentroot目录,确保其是所有用户可读的
f) 编辑cgi-bin目录下的vqsignup.conf文件:
修改"add_domain"一行,包含你希望支持的虚拟域
更新"result_*"行,指定vqsignup_text/*.html的完全路径
g) 进入vqsignup_text目录,编辑每个文件,使其只包含你希望支持的虚拟域。若希望界面美观,则编辑html文件
h) 编辑documentroot目录下的vqsignup.html文件,使其仅仅包含你希望支持的虚拟域。更新html文件以美化页面
15.4测试
在浏览器中连接http://your web server/vqsignup.html,来测试注册账号
參考
qmail-howto
qmail fqa (內含于 qmail 1.03 source code)
http://www.qmail.org/
Java Asp PHP .Net XML C/C++ CGI VB Jsp J2ee J2se J2me EJB Servlet Tomcat Resin Struts Weblogic Eclipse ANT GUI JMS Web servise IDEA Webphere Hibernate Spring Jboss Applet Swing Socket Javamail Perl Ajax P2P 安全 模式 框架 测试 开源 游戏
Windows XP Windows 2000 Windows 2003 Windows Me Windows 9.x Linux UNIX 注册表 操作系统 服务器 应用服务器