作者:白东(Albert Ding)
由于更换服务器,因此重建了邮件服务器。
相关网站:
- qmail ( http://www.qmail.org );
- qmail-smtpd-auth (smtp验证模块)( http://members.elysium.pl/brush/qmail-smtpd-auth/ );
- ucspi-tcp 和 daemontools ( http://cr.yp.to/software.html );
- vpopmail ( http://sourceforge.net/projects/vpopmail/ );
下载所需的源文件(如果下载不了,可能是已经有了升级,那么就需要到这些网站上去下载了):
- qmail ( http://www.qmail.org/netqmail-1.05.tar.gz );
- qmail-smtpd-auth ( http://members.elysium.pl/brush/qmail-smtpd-auth/dist/ 到这个页面下载最新的版本 );
- ucspi-tcp ( ftp://cr.yp.to/ucspi-tcp/ucspi-tcp-0.88.tar.gz );
- daemontools ( ftp://cr.yp.to/daemontools/daemontools-0.76.tar.gz );
- vpopmail ( http://sourceforge.net/projects/vpopmail/ 到这个页面查看下载最新版本);
解压
- qmail
- tar xvfz netqmail-1.05.tar.gz
- cd netqmail-1.05
- ./collate.sh (1.05后,需要在解压后执行这个文件)
- qmail-smtpd-auth
- tar xvfz qmail-smtpd-auth-0.31.tar.gz
- cp README.auth base64.c base64.h ../netqmail-1.05/netqmail-1.05
- patch -d ../netqmail-1.05/netqmail-1.05 <>
- ucspi-tcp
- tar xvfz ucspi-tcp-0.88.tar.gz
- daemontools
- mkdir -p /package
- mv daemontools-0.76.tar.gz /package
- tar xvfz daemontools-0.76.tar.gz
- vpopmail
- tar xvfz vpopmail-5.4.9.tar.gz
安装qmail
- qmail
- mkdir /var/qmail
- 建立qmail用户和用户组,见 附录1
- make setup check
- ./config (如果不成功,使用 ./config-fast the.full.hostname )
- ucspi-tcp
- patch < /usr/src/netqmail-1.05/other-patches/ucspi-tcp-0.88.errno.patch
- make
- make setup check
- daemontools
- cd src
- patch < /usr/src/netqmail-1.05/other-patches/daemontools-0.76.errno.patch
- cd ..
- package/install
设置qmail (请注意在安装vpopmail前的设置和附录中的文件,和在安装vpopmail后,会有所变化)
- 建立文件:/var/qmail/rc,见附录2
- chmod 755 /var/qmail/rc
- mkdir /var/log/qmail
- echo ./Mailbox >/var/qmail/control/defaultdelivery
- 建立启动文件:
- /var/qmail/bin/qmailctl (qmail运行控制文件)见附录3
- chmod 755 /var/qmail/bin/qmailctl (赋可执行权限)
- ln -s /var/qmail/bin/qmailctl /usr/bin (在bin中建立链接,运行时不用输入完整路径)
- mkdir -p /var/qmail/supervise/qmail-send/log (发送日志执行文件目录)
- mkdir -p /var/qmail/supervise/qmail-smtpd/log (smtp登陆日志执行目录)
- 建立文件 /var/qmail/supervise/qmail-send/run (启动发送邮件文件)见附录4
- 建立文件 /var/qmail/supervise/qmail-send/log/run (发送日志运行文件) 见附录5
- 建立文件 /var/qmail/supervise/qmail-smtpd/run (smtp进程启动文件) 见附录6
- echo 20 > /var/qmail/control/concurrencyincoming (并发数量)
- chmod 644 /var/qmail/control/concurrencyincoming (改变属性)
- 建立文件 /var/qmail/supervise/qmail-smtpd/log/run (smtp日志执行文件) 见附录7
- chmod 755 /var/qmail/supervise/qmail-send/run (赋予可执行权限)
- chmod 755 /var/qmail/supervise/qmail-send/log/run
- chmod 755 /var/qmail/supervise/qmail-smtpd/run
- chmod 755 /var/qmail/supervise/qmail-smtpd/log/run
- mkdir -p /var/log/qmail/smtpd (建立smtp登陆日志文件保存目录)
- chown qmaill /var/log/qmail /var/log/qmail/smtpd (改变目录所有者)
- ln -s /var/qmail/supervise/qmail-send /var/qmail/supervise/qmail-smtpd /service (建立链接,以便守护进程启动它们)
- echo '127.:allow,RELAYCLIENT=""' >>/etc/tcp.smtp (建立smtp允许规则)
- qmailctl cdb (为smtp重建tcpserver cdb文件)
- mkdir -p /var/qmail/supervise/qmail-pop3d/log (建立pop3日志执行文件目录)
- 建立文件 /var/qmail/supervise/qmail-pop3d/run (pop3启动文件) 见附录9
- 建立文件 /var/qmail/supervise/qmail-pop3d/log/run (pop3日志执行文件) 见附录10
- mkdir /var/log/qmail/pop3d (建立pop3日志保存目录)
- chown qmaill /var/log/qmail/pop3d (改变目录所有者)
- chmod 755 /var/qmail/supervise/qmail-pop3d/run (赋予run可执行权限)
- chmod 755 /var/qmail/supervise/qmail-pop3d/log/run
- ln -s /var/qmail/supervise/qmail-pop3d /service (建立链接,以便守护进程启动它)
- 修改 qmailctl 文件内容,添加了pop3部分的完整内容 见附录11
- 删除sendmail,及建立链接到qmail
- mv /usr/lib/sendmail /usr/lib/sendmail.old # ignore errors
- mv /usr/sbin/sendmail /usr/sbin/sendmail.old # ignore errors
- chmod 0 /usr/lib/sendmail.old /usr/sbin/sendmail.old # ignore errors
- ln -s /var/qmail/bin/sendmail /usr/lib
- ln -s /var/qmail/bin/sendmail /usr/sbin
- 建立系统级别名
- echo your-name > /var/qmail/alias/.qmail-root
- echo your-name > /var/qmail/alias/.qmail-postmaster
- ln -s .qmail-postmaster /var/qmail/alias/.qmail-mailer-daemon
- chmod 644 /var/qmail/alias/.qmail-root /var/qmail/alias/.qmail-postmaster
启动qmail
- # qmailctl start
测试qmail
- # qmailctl stat 执行后应看到以下信息:
/service/qmail-send: up (pid 30303) 187 seconds
/service/qmail-send/log: up (pid 30304) 187 seconds
/service/qmail-smtpd: up (pid 30305) 187 seconds
/service/qmail-smtpd/log: up (pid 30308) 187 seconds
messages in queue: 0
messages in queue but not yet preprocessed: 0 - 建立文件 inst_check,见附录8
- 执行命令:sh inst_check,如果成功,则有如下提示:
Congratulations, your LWQ installation looks good! - ps -efl | grep "service errors" | grep -v grep 会看到类似下面的信息:
4 S root 3878 3866 0 85 0 - 305 pipe_w 15:14 ? 00:00:00 readproctitle service errors: ........... - 如果“......."后面没有内容,那就说明正确,如果有内容,则是错误提示
- 添加了 pop3 部分的 qmailctl 查看的状态是:
/service/qmail-send: up (pid 4119) 513 seconds
/service/qmail-send/log: up (pid 4132) 513 seconds
/service/qmail-smtpd: up (pid 4120) 513 seconds
/service/qmail-smtpd/log: up (pid 4133) 513 seconds
messages in queue: 0
messages in queue but not yet preprocessed: 0
/service/qmail-pop3d: up (pid 5176) 1 seconds
/service/qmail-pop3d/log: up (pid 4134) 513 seconds - 到这里qmail安装成功,下面安装设置vpopmail
vpopmail 安装及配置
- 准备
- 新建用户 vpopmail 和 用户组 vchkpw ,大多数用都会把 uid 和 gid 设定为89,这个其实无所谓,其实脚本里完全可以不需要这个,加个获得uid和gid的代码就可以了。所以这里说uid和gid,你不用去太关心。
- 而你要关心的是 vpopmail 这个用户的用户根目录设定在哪里?
- 如果你已经为保存邮件而设定了一个分区,那么就把vpopmail的用户根目录设定为这个分区。
- 如果没有,建议设定到一个比较大的相对独立的分区,如果可以,不要设定在home分区,因为保存邮件的分区随着邮件服务器运行会不断的产生大量磁盘碎片,这会非常影响home分区中其它用户的使用的性能。
- 安装
- 添加用户vpopmail和用户组vchkpw,当然,可以使用任何添加用户和用户组的方法新建它们,这里给出的是命令行方式:
- groupadd -g 89 vchkpw
- useradd -g vchkpw -u 89 -d /home/vpopmail vpopmail
- mkdir ~vpopmail/etc (建立etc目录)
- chown vpopmail.vchkpw ~vpopmail/etc (改变所属用户和组)
- echo "localhost|0|vpopmailuser|vpoppasswd|vpopmail" > ~vpopmail/etc/vpopmail.mysql (建立vpopmail链接MySQL数据库的配置文件)
- chown vpopmail.vchkpw ~vpopmail/etc/vpopmail.mysql (改变所属用户和组)
- chmod 640 ~vpopmail/etc/vpopmail.mysql (修改文件属性)
- 在 MySQL 中建立一个用户:vpopmail,不要给这个用户任何权限
- 在 MysQL 中建立一个数据库:vpopmail
- 在 MySQL 中设定数据库权限,将数据库vpopmail只运行vpopmail这个用户访问,权限设定为:select,insert,update,delete,create,drop 。
- 配置vpopmail (配置选项扼要解释:关闭了登陆pop3后可发送smtp的功能,因为我们的qmail安装了smtp验证;关闭了邮箱容量限制;校验模块使用MySQL;打开别名功能)
./configure --disable-roaming-users --enable-logging=p --disable-passwd --enable-clear-passwd --disable-domain-quotas --enable-auth-module=mysql --disable-many-domains --enable-auth-logging --enable-sql-logging --enable-valias --disable-mysql-limits - 编译和安装
make
make install-strip - 如果你想设定邮箱容量限制,那么修改 vlimits.default:
vi ~vpopmail/etc/vlimits.default
# in particular set the default mailbox size to be something reasonable eg 20Mb
default_quota 20971520 (修改这个内容,默认的是20M) - 设定默认域(这个问题,有的人说没必要,我认为有必要,这样对主域来说,在客户端就不需要在用户名处输入全部邮件地址了。)
echo "yourdomain.com" > ~vpopmail/etc/defaultdomain - 设定邮箱内邮件总容量达到邮箱限制的90%的提示内容文件
~vpopmail/domains/.quotawarn.msg 见附录12 - 设定邮箱已满的提示信息内容(写中文也可以,不过如果客户端不一定能正常显示,所以还是写英文吧)
echo "Message rejected. Not enough storage space in user's mailbox to accept message." > ~vpopmail/domains/.over-quota.msg - 好了vpopmail安装和设定好了。现在要修改 qmail pop3启动内容。就是让qmail的pop3部分使用vpopmail的校验,当然也需要修改smtp部分的内容,是让qmail的smtp验证使用vpopmail的校验。
- 修改文件 /var/qmail/supervise/qmail-pop3d/run 见附录13
- 修改文件 /var/qmail/supervise/qmail-smtpd/run 见附录14
- 重新启动qmail
qmailctl restart - 用telnet方式来测试:
- 测试 pop3 的命令(橙色部分为系统显示内容):
# telnet localhost 110
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
+OK 4047.1110877290@your-domain-address
user your-email-user-name
+OK
pass your-email-user's-password
+OK
如果输入password后显示"+OK"那就表示正确! - 测试 smtp 的命令(橙色部分为系统显示内容):
# telnet localhost 25
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 your-domain-address ESMTP
HELO
250 your-domain-address
MAIL FROM:user@ your-domain-address
250 ok
RCPT TO:receive-user@ receive-user-domain-address
250 ok
DATA
354 go ahead
Subject: test message
This is a test message
.
250 ok 1110872613 qp 22398 - 用户邮件客户端软件测试。
- 测试 pop3 的命令(橙色部分为系统显示内容):
- 添加用户vpopmail和用户组vchkpw,当然,可以使用任何添加用户和用户组的方法新建它们,这里给出的是命令行方式:
- 维护
- 添加域:~vpopmail/bin/vadddomain your-domain-name
- 添加用户邮箱:~vpopmail/bin/vadduser username@your-domain-name.com
- 删除用户邮箱:~vpopmail/bin/vdeluser username@your-domain-name.com
- 删除域:~vpopmail/bin/vdeldomain your-domain-name
- 修改用户邮箱的密码:~vpopmail/bin/vpasswd username@your-domain-name.com
- 查看用户邮箱信息:~vpopmail/bin/vuserinfo username@your-domain-name.com
- 其它更多的命令,需要查看帮助中的解释和说明
有可能遇到的问题:
- Outlook提示:Server Error: 553, Error Number: 0x800CCC79 错误信息。客户端无法收发信,总是提示用户名和密码错误。
原因:这个很可能是由于softlimit的-m的值过小,导致:vchkpw:error while loading shared libraries:libc.so.6: failed to map segment from shared...。
解决办法:将smtp启动脚本中的softlimit -m 值设置大些。例如设定成4000000(4M)或者更大。 - 如 果qmail正确,确总是出现用户名密码错误,这多部分说明是vpopmail验证部分出问题了,仔细检查启动脚本中是否有错误,例如:你可能设定 vpopmail用户的用户根目录不是/home/vpopmail,而在脚本中写的是/home/vpopmail,如果是这样,建议你在绝大多数情况 下,写成 ~vpopmail。
- Vpopmail 编译安装后,数据库vpopmail中没有增加表等内容。这说明你的MySQL安装有问题,或者是 share模块安装的不正确,解决办法:
- 使用你设定的MySQL中的vpopmail账号进行登陆MySQL以及访问vpopmail数据库的尝试,如果成功,则是MySQL share部分的问题,重新安装它。
- 如果使用该账号不能访问成功,说明MySQL中账号或权限设定有问题。
============
|| 附 录 ||
============
- 用于建立qmail用户和用户组的脚本(文件名:IDS) (改变权限:chmod 700 IDS)
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 - 文件 /var/qmail/rc
#!/bin/sh
# Using stdout for logging
# Using control/defaultdelivery from qmail-local to deliver messages by default
exec env - PATH="/var/qmail/bin:$PATH" \
qmail-start "`cat /var/qmail/control/defaultdelivery`" - 文件 /var/qmail/bin/qmailctl
#!/bin/sh
# description: the qmail MTA
PATH=/var/qmail/bin:/bin:/usr/bin:/usr/local/bin:/usr/local/sbin
export PATH
QMAILDUID=`id -u qmaild`
NOFILESGID=`id -g qmaild`
case "$1" in
start)
echo "Starting qmail"
if svok /service/qmail-send ; then
svc -u /service/qmail-send /service/qmail-send/log
else
echo "qmail-send supervise not running"
fi
if svok /service/qmail-smtpd ; then
svc -u /service/qmail-smtpd /service/qmail-smtpd/log
else
echo "qmail-smtpd supervise not running"
fi
if [ -d /var/lock/subsys ]; then
touch /var/lock/subsys/qmail
fi
;;
stop)
echo "Stopping qmail..."
echo " qmail-smtpd"
svc -d /service/qmail-smtpd /service/qmail-smtpd/log
echo " qmail-send"
svc -d /service/qmail-send /service/qmail-send/log
if [ -f /var/lock/subsys/qmail ]; then
rm /var/lock/subsys/qmail
fi
;;
stat)
svstat /service/qmail-send
svstat /service/qmail-send/log
svstat /service/qmail-smtpd
svstat /service/qmail-smtpd/log
qmail-qstat
;;
doqueue|alrm|flush)
echo "Flushing timeout table and sending ALRM signal to qmail-send."
/var/qmail/bin/qmail-tcpok
svc -a /service/qmail-send
;;
queue)
qmail-qstat
qmail-qread
;;
reload|hup)
echo "Sending HUP signal to qmail-send."
svc -h /service/qmail-send
;;
pause)
echo "Pausing qmail-send"
svc -p /service/qmail-send
echo "Pausing qmail-smtpd"
svc -p /service/qmail-smtpd
;;
cont)
echo "Continuing qmail-send"
svc -c /service/qmail-send
echo "Continuing qmail-smtpd"
svc -c /service/qmail-smtpd
;;
restart)
echo "Restarting qmail:"
echo "* Stopping qmail-smtpd."
svc -d /service/qmail-smtpd /service/qmail-smtpd/log
echo "* Sending qmail-send SIGTERM and restarting."
svc -t /service/qmail-send /service/qmail-send/log
echo "* Restarting qmail-smtpd."
svc -u /service/qmail-smtpd /service/qmail-smtpd/log
;;
cdb)
tcprules /etc/tcp.smtp.cdb /etc/tcp.smtp.tmp < /etc/tcp.smtp chmod 644 /etc/tcp.smtp.cdb echo "Reloaded /etc/tcp.smtp." ;; help) cat < - 文件 /var/qmail/supervise/qmail-send/run
#!/bin/sh
exec /var/qmail/rc - 文件 /var/qmail/supervise/qmail-send/log/run
#!/bin/sh
exec /usr/local/bin/setuidgid qmaill /usr/local/bin/multilog t /var/log/qmail - 文件 /var/qmail/supervise/qmail-smtpd/run
#!/bin/sh
QMAILDUID=`id -u qmaild`
NOFILESGID=`id -g qmaild`
MAXSMTPD=`cat /var/qmail/control/concurrencyincoming`
LOCAL=`head -1 /var/qmail/control/me`
if [ -z "$QMAILDUID" -o -z "$NOFILESGID" -o -z "$MAXSMTPD" -o -z "$LOCAL" ]; then
echo QMAILDUID, NOFILESGID, MAXSMTPD, or LOCAL is unset in
echo /var/qmail/supervise/qmail-smtpd/run
exit 1
fi
if [ ! -f /var/qmail/control/rcpthosts ]; then
echo "No /var/qmail/control/rcpthosts!"
echo "Refusing to start SMTP listener because it'll create an open relay"
exit 1
fi
exec /usr/local/bin/softlimit -m 2000000 \
/usr/local/bin/tcpserver -v -R -l "$LOCAL" -x /etc/tcp.smtp.cdb -c "$MAXSMTPD" \
-u "$QMAILDUID" -g "$NOFILESGID" 0 smtp /var/qmail/bin/qmail-smtpd 2>&1
- 文件 /var/qmail/supervise/qmail-smtpd/log/run
#!/bin/sh exec /usr/local/bin/setuidgid qmaill /usr/local/bin/multilog t /var/log/qmail/smtpd - 文件 inst_check
# Dave Sill, 2003-11-10
# http://lifewithqmail.org/inst_check
# set to n if you're not running a pop3 server, y if you are
CHECKPOP=n
QMHOME=/var/qmail
LBIN=/usr/local/bin
OK=1
if [ $# -eq 1 ]; then
if [ "$1" = "-v" ]; then
VERB=y
else
VERB=n
fi
fi
if [ ! -d $QMHOME ]; then
echo "! Couldn't find qmail's home directory, $QMHOME!"
else
if [ "$VERB" = y ]; then
echo "$QMHOME exists"
fi
for i in alias bin boot control doc man queue supervise users; do
if [ ! -d $QMHOME/$i ]; then
echo "! Couldn't find $QMHOME/$i!"
OK=0
elif [ "$VERB" = y ]; then
echo "$QMHOME/$i exists"
fi
done
if [ ! -f $QMHOME/rc ]; then
echo "! $QMHOME/rc is missing"
OK=0
elif [ ! -x $QMHOME/rc ]; then
echo "! $QMHOME/rc is not executable"
echo "...try: chmod 755 $QMHOME/rc"
OK=0
elif [ `head -1 $QMHOME/rc|cat -vet` != '#!/bin/sh$' ]; then
echo "! $QMHOME/rc has bad magic cookie"
echo "...try: dos2unix $QMHOME/rc"
OK=0
elif [ "$VERB" = y ]; then
echo "$QMHOME/rc is executable and has a valid magic cookie"
fi
fi
for i in alias qmaild qmaill qmailp qmailq qmailr qmails; do
grep "^$i:" /etc/passwd >/dev/null
if [ $? -ne 0 ]; then
echo "! Couldn't find $i user in /etc/passwd"
OK=0
elif [ "$VERB" = y ]; then
echo "$i user exists"
fi
done
for i in qmail nofiles; do
grep "^$i:" /etc/group >/dev/null
if [ $? -ne 0 ]; then
echo "! Couldn't find $i group in /etc/group"
OK=0
elif [ "$VERB" = y ]; then
echo "$i group exists"
fi
done
for i in tcprules tcpserver; do
if [ ! -x $LBIN/$i ]; then
echo "! Couldn't find $LBIN/$i from ucspi-tcp"
OK=0
elif [ "$VERB" = y ]; then
echo "$i from ucspi-tcp is installed"
fi
done
for i in multilog softlimit setuidgid supervise svok svscan tai64nlocal; do
if [ ! -x $LBIN/$i ]; then
echo "! Couldn't find $LBIN/$i from daemontools"
OK=0
elif [ "$VERB" = y ]; then
echo "$i from daemontools is installed"
fi
done
if [ ! -d /service ]; then
echo "! /service directory is missing"
OK=0
elif [ "$VERB" = y ]; then
echo "/service directory exists"
fi
if [ -f /etc/inittab ]; then
grep "^SV" /etc/inittab >/dev/null
if [ $? -ne 0 ]; then
echo "! Couldn't find SV entry in inittab"
OK=0
elif [ "$VERB" = y ]; then
echo "svscan /service is configured to run via /etc/inittab"
fi
PS="ps -ef"
else
grep "svscanboot" /etc/rc.local >/dev/null
if [ $? -ne 0 ]; then
echo "! Couldn't find 'csh -cf '/command/svscanboot &' in /etc/rc.local"
OK=0
elif [ "$VERB" = y ]; then
echo "/command/svscanboot is configured to run via /etc/rc.local"
fi
PS="ps -waux"
fi
SVRUN=`$PS | grep "svscan /service" | grep -v grep`
if [ -z "$SVRUN" ]; then
echo "'! svscan /service' doesn't seem to be running"
OK=0
elif [ "$VERB" = y ]; then
echo "svscan /service is running"
fi
if [ ! -f $QMHOME/control/defaultdelivery ]; then
echo "! Couldn't find $QMHOME/control/defaultdelivery"
OK=0
elif [ ! -s $QMHOME/control/defaultdelivery ]; then
echo "! $QMHOME/control/defaultdelivery is empty"
OK=0
elif [ "$VERB" = y ]; then
echo "$QMHOME/control/defaultdelivery looks OK"
fi
if [ ! -f $QMHOME/bin/qmailctl ]; then
echo "! $QMHOME/bin/qmailctl is missing"
OK=0
elif [ ! -s $QMHOME/bin/qmailctl ]; then
echo "! $QMHOME/bin/qmailctl is empty"
OK=0
elif [ `head -1 $QMHOME/bin/qmailctl|cat -vet` != '#!/bin/sh$' ]; then
echo "! $QMHOME/bin/qmailctl has bad magic cookie"
echo "...try: dos2unix $QMHOME/bin/qmailctl"
OK=0
elif [ ! -x $QMHOME/bin/qmailctl ]; then
echo "! $QMHOME/bin/qmailctl is not executable"
echo "...try: chmod 755 $QMHOME/bin/qmailctl"
OK=0
elif [ "$VERB" = y ]; then
echo "$QMHOME/bin/qmailctl looks OK"
fi
if [ ! -L /usr/bin/qmailctl ]; then
echo "! /usr/bin/qmailctl is missing"
echo "...try: ln -s $QMHOME/bin/qmailctl /usr/bin"
OK=0
elif [ "$VERB" = y ]; then
echo "/usr/bin/qmailctl exists"
fi
SVCDIRS="qmail-send qmail-send/log qmail-smtpd qmail-smtpd/log"
if [ "$CHECKPOP" = "y" ]; then
SVCDIRS="$SVCDIRS qmail-pop3d qmail-pop3d/log"
fi
for i in $SVCDIRS; do
if [ ! -f $QMHOME/supervise/$i/run ]; then
echo "! $QMHOME/supervise/$i/run file is missing"
OK=0
elif [ `head -1 $QMHOME/supervise/$i/run|cat -vet` != '#!/bin/sh$' ]; then
echo "! $QMHOME/supervise/$i/run has bad magic cookie"
echo "...try: dos2unix $QMHOME/supervise/$i/run"
OK=0
elif [ ! -x $QMHOME/supervise/$i/run ]; then
echo "! $QMHOME/supervise/$i/run file is not executable"
OK=0
elif [ "$VERB" = y ]; then
echo "$QMHOME/supervise/$i/run looks OK"
fi
done
if [ ! -f $QMHOME/control/concurrencyincoming ]; then
echo "! $QMHOME/control/concurrencyincoming is missing"
echo "...try: echo 20 >$QMHOME/control/concurrencyincoming"
OK=0
elif [ "$VERB" = y ]; then
echo "$QMHOME/control/concurrencyincoming looks OK"
fi
LOGDIRS="/var/log/qmail /var/log/qmail/smtpd"
if [ "$CHECKPOP" = "y" ]; then
LOGDIRS="$LOGDIRS /var/log/qmail/pop3d"
fi
for i in $LOGDIRS; do
if [ ! -d $i ]; then
echo "! $i is missing"
echo "...try: mkdir -p $i"
OK=0
elif [ "`ls -ld $i|awk '{print $3}'`" != "qmaill" ]; then
echo "! $i has wrong owner, should be qmaill"
echo "...try: chown qmaill $i"
OK=0
elif [ "`ls -ld $i|awk '{print $1}'`" != "drwxr-xr-x" ]; then
echo "! $i has wrong mode, should be 755"
echo "...try: chmod 755 $i"
OK=0
elif [ "$VERB" = y ]; then
echo "$i looks OK"
fi
done
SVCLINKS="/service/qmail-send /service/qmail-smtpd"
if [ "$CHECKPOP" = "y" ]; then
SVCLINKS="$SVCLINKS /service/qmail-pop3d"
fi
for i in $SVCLINKS; do
if [ ! -L $i ]; then
echo "! $i is missing"
echo "...try: ln -s $QMHOME$i $i"
OK=0
elif [ "$VERB" = y ]; then
echo "$i exists"
fi
done
if [ ! -f /etc/tcp.smtp ]; then
echo "! /etc/tcp.smtp is missing"
echo "...try: echo '127.:allow,RELAYCLIENT=\"\"' >>/etc/tcp.smtp"
OK=0
elif [ "$VERB" = y ]; then
echo "/etc/tcp.smtp exists"
fi
if [ ! -f /etc/tcp.smtp.cdb ]; then
echo "! /etc/tcp.smtp.cdb is missing"
echo "...try: $QMHOME/bin/qmailctl cdb"
OK=0
elif [ "$VERB" = y ]; then
echo "/etc/tcp.smtp.cdb exists"
fi
AHOME=`grep "^alias:" /etc/passwd | awk -F: '{print $6}'`
if [ -z "$AHOME" ]; then
echo "! Couldn't find user alias's home directory"
OK=0
else
for i in root postmaster mailer-daemon; do
if [ ! -f $AHOME/.qmail-$i ]; then
echo "! Alias for $i is missing"
echo "...try: echo me >$AHOME/.qmail-$i"
OK=0
elif [ "$VERB" = y ]; then
echo "$i alias exists"
fi
done
fi
if netstat -a | grep smtp | grep -i listen >/dev/null; then
if $PS | grep sendmail | grep -v grep >/dev/null; then
echo "! Sendmail is still running"
echo "...try: $RCDIR/init.d/sendmail stop"
OK=0
elif $LBIN/svok /service/qmail-smtpd; then
if [ "$VERB" = y ]; then
echo "/service/qmail-smtpd is running"
fi
else
echo "! Something is listening on port 25 (not tcpserver/qmail-smtpd)"
echo "...try: disabling current MTA"
OK=0
fi
fi
if [ "$CHECKPOP" = "y" ]; then
if netstat -a | grep pop | grep -i listen >/dev/null; then
if $LBIN/svok /service/qmail-pop3d; then
if [ "$VERB" = y ]; then
echo "/service/qmail-pop3d is running"
fi
else
echo "! Something is listening on port 110 (not tcpserver/qmail-pop3d)"
echo "...try: disabling other POP server"
OK=0
fi
fi
fi
for i in /usr/lib/sendmail /usr/sbin/sendmail; do
if [ -f $i -a ! -L $i ]; then
echo "! $i is a file, should be a link"
echo "...try: uninstalling current MTA or: mv $i $i.old; ln -s $QMHOME/bin/sendmail $i"
OK=0
elif [ ! -f $i ];then
echo "! $i is missing"
echo "...try: ln -s $QMHOME/bin/sendmail $i"
OK=0
elif [ "$VERB" = y ]; then
echo "$i exists"
fi
done
if [ $OK -eq 1 ]; then
echo "Congratulations, your LWQ installation looks good!"
elif [ "$VERB" = y ]; then
echo "! Potential problems were found with your LWQ installation"
fi - 文件 /var/qmail/supervise/qmail-pop3d/run
(注:2000000这个比较小,最好是设置大些,以免出现不能载入的问题)
#!/bin/sh
LOCAL=`head -1 /var/qmail/control/me`
exec /usr/local/bin/softlimit -m 2000000 \
/usr/local/bin/tcpserver -v -R -H -l 0 0 110 /var/qmail/bin/qmail-popup \
"$LOCAL" /bin/checkpassword /var/qmail/bin/qmail-pop3d Maildir 2>&1 - 文件 /var/qmail/supervise/qmail-pop3d/log/run
#!/bin/sh
exec /usr/local/bin/setuidgid qmaill /usr/local/bin/multilog t \
/var/log/qmail/pop3d - 添加了 pop3 部分的完整的 qmailctl 文件
#!/bin/sh
# Description: the qmail MTA
PATH=/var/qmail/bin:/bin:/usr/bin:/usr/local/bin:/usr/local/sbin
export PATH
QMAILDUID=`id -u qmaild`
NOFILESGID=`id -g qmaild`
case "$1" in
start)
echo "Starting qmail"
if svok /service/qmail-send ; then
svc -u /service/qmail-send /service/qmail-send/log
else
echo "qmail-send supervise not running"
fi
if svok /service/qmail-smtpd ; then
svc -u /service/qmail-smtpd /service/qmail-smtpd/log
else
echo "qmail-smtpd supervise not running"
fi
if [ -d /var/lock/subsys ]; then
touch /var/lock/subsys/qmail
fi
if svok /service/qmail-pop3d ; then
svc -u /service/qmail-pop3d /service/qmail-pop3d/log
else
echo qmail-pop3d supervise not running
fi
;;
stop)
echo "Stopping qmail..."
echo " qmail-smtpd"
svc -d /service/qmail-smtpd /service/qmail-smtpd/log
echo " qmail-send"
svc -d /service/qmail-send /service/qmail-send/log
if [ -f /var/lock/subsys/qmail ]; then
rm /var/lock/subsys/qmail
fi
echo " qmail-pop3d"
svc -d /service/qmail-pop3d /service/qmail-pop3d/log
;;
stat)
svstat /service/qmail-send
svstat /service/qmail-send/log
svstat /service/qmail-smtpd
svstat /service/qmail-smtpd/log
qmail-qstat
svstat /service/qmail-pop3d
svstat /service/qmail-pop3d/log
;;
doqueue|alrm|flush)
echo "Flushing timeout table and sending ALRM signal to qmail-send."
/var/qmail/bin/qmail-tcpok
svc -a /service/qmail-send
;;
queue)
qmail-qstat
qmail-qread
;;
reload|hup)
echo "Sending HUP signal to qmail-send."
svc -h /service/qmail-send
;;
pause)
echo "Pausing qmail-send"
svc -p /service/qmail-send
echo "Pausing qmail-smtpd"
svc -p /service/qmail-smtpd
echo "Pausing qmail-pop3d"
svc -p /service/qmail-pop3d
;;
cont)
echo "Continuing qmail-send"
svc -c /service/qmail-send
echo "Continuing qmail-smtpd"
svc -c /service/qmail-smtpd
echo "Continuing qmail-pop3d"
svc -c /service/qmail-pop3d
;;
restart)
echo "Restarting qmail:"
echo "* Stopping qmail-smtpd."
svc -d /service/qmail-smtpd /service/qmail-smtpd/log
echo "* Sending qmail-send SIGTERM and restarting."
svc -t /service/qmail-send /service/qmail-send/log
echo "* Restarting qmail-smtpd."
svc -u /service/qmail-smtpd /service/qmail-smtpd/log
echo "* Restarting qmail-pop3d."
svc -t /service/qmail-pop3d /service/qmail-pop3d/log
;;
cdb)
tcprules /etc/tcp.smtp.cdb /etc/tcp.smtp.tmp < /etc/tcp.smtp chmod 644 /etc/tcp.smtp.cdb echo "Reloaded /etc/tcp.smtp." ;; help) cat <exit 0 - 文件 ~vpopmail/domains/.quotawarn.msg
From: YourCompany PostmasterYourCompany.com> Your mailbox on the server is now more than 90% full.
Reply-To: postmaster@ YourCompany.com
To: YourCompany User:;
Subject: Mail quota warning
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 7bit
So that you can continue to receive mail,
you need to remove some messages from your mailbox.
If you require assistance with this,
please contact our support department :
Email : xxx @ xxx.com
Telphone: xxx xxx xxx - 文件 /var/qmail/supervise/qmail-pop3d/run (安装了vpopmail后的文件)
(注:如果内存够大,这个-m 的值还是设大些的好。这里设定为10M)
#!/bin/sh
LOCAL=`head -1 /var/qmail/control/me`
exec /usr/local/bin/softlimit -m 10000000 \
/usr/local/bin/tcpserver -v -R -H -l 0 0 pop3 /var/qmail/bin/qmail-popup \
"$LOCAL" ~vpopmail/bin/vchkpw /var/qmail/bin/qmail-pop3d Maildir 2>&1 - 文件 /var/qmail/supervise/qmail-smtpd/run (安装了vpopmail后的文件)
(注:如果内存够大,这个-m 的值还是设大些的好。这里设定为10M)
#!/bin/sh
QMAILDUID=`id -u qmaild`
NOFILESGID=`id -g qmaild`
VPOPMAILUID='id -u vpopmail'
VCHKPWGID='id -g vchkpw'
MAXSMTPD=`cat /var/qmail/control/concurrencyincoming`
LOCAL=`head -1 /var/qmail/control/me`
if [ -z "$QMAILDUID" -o -z "$NOFILESGID" -o -z "$MAXSMTPD" -o -z "$LOCAL" ]; then
echo QMAILDUID, NOFILESGID, MAXSMTPD, or LOCAL is unset in
echo /var/qmail/supervise/qmail-smtpd/run
exit 1
fi
if [ ! -f /var/qmail/control/rcpthosts ]; then
echo "No /var/qmail/control/rcpthosts!"
echo "Refusing to start SMTP listener because it'll create an open relay"
exit 1
fi
exec /usr/local/bin/softlimit -m 20000000 \
/usr/local/bin/tcpserver -H -R -l "$LOCAL" -x /etc/tcp.smtp.cdb -c "$MAXSMTPD" \
-u "$VPOPMAILUID" -g "$VCHKPWGID" 0 smtp /var/qmail/bin/qmail-smtpd "$LOCAL" ~vpopmail/bin/vchkpw /bin/true 2>&1
No comments:
Post a Comment