安装系统:redhat linux as 4   2.6.9
卸载已有的邮件系统sendmail<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

/etc/init.d/sendmail stop

rpm -e --nodeps sendmail

 

(# 删除sendmail的链接
rm -rf /usr/sbin/sendmail)

 

一、            安装 UCSPI-TCP
ucspi-tcp
软件包由一组工具组成。它们用来简单的建立客户机-服务器tcp后台程序。TcpServer是一个比inetd安全性更好的选择。它内建有基于规则的连接控制,能完善地在达到预定义的最大系统负载时将连接推迟,这点比 inetd好。Tcpserver也被推荐与qmail一同使用,因为它们是同一个作者编的程序。

cd /usr/local/src
tar xzvf ucspi-tcp-0.88.tar.gz
chown -R root.root ucspi-tcp-0.88
cd ucspi-tcp-0.88

patch -p1 < ../ucspi-tcp-0.88.a_record.patch
patch -p1 < ../ucspi-tcp-0.88.errno.patch  
patch -p1 < ../ucspi-tcp-0.88.nobase.patch 

# rblsmtpd 打补丁,使之能够使用所有最新的 RBL

# 这人。
patch -p0 rblsmtpd.c <
。。。。。/ucspi-rss.diff

# 修改 rblsmtpd.c 以增加错误文本的最大长度,从 200个字符修改为 500 个。
#
这样就可以把足够说明问题的信息返回给被 RBL 过滤掉的发件人。

vi rblsmtpd.c
166 行,修改

if (text.len > 200) text.len = 200;

为:

if (text.len > 500) text.len = 500;

make
make setup check

二、            安装 DAEMONTOOLS

daemontools是一个收集管理UNIX进程的工具.用它来监听qmail-send,qmail-smtpd,qmail-pop3d.

mkdir -p /package
chmod 1755 /package
cd /package
tar xzvf daemontools-0.76.tar.gz
cd admin/daemontools-0.76

linux企业版补丁

patch -p1 <  /root/qmail/daemontools-0.76.errno.patch
package/install

安装完毕,用 ps -ef|grep sv 就可以看到有进程在跑了。

如果不想 daemontools 运行,可以注释掉
inittab
中的这句话,然后用 init q 命令重新刷新一下运行级别即可。

三、            安装 qmail

建立目录

# mkdir /var/qmail  

# mkdir /var/qmail/alias

建组及用户

# groupadd nofiles  

# groupadd qmail  

# useradd alias -g nofiles -d /var/qmail/alias -s /nonexistent  

# useradd qmaild -g nofiles -d /var/qmail -s /nonexistent  

# useradd qmaill -g nofiles -d /var/qmail -s /nonexistent  

# useradd qmailp -g nofiles -d /var/qmail -s /nonexistent  

# useradd qmailq -g qmail -d /var/qmail -s /nonexistent  

# useradd qmailr -g qmail -d /var/qmail -s /nonexistent  

# useradd qmails -g qmail -d /var/qmail -s /nonexistent

tar zxvf qmail-1.03.tar.gz

cd qmail-1.03
#
dns 打补丁
patch -p1 < $QM_GZDIR/qmail-103.patch
#
qmailqueue 打补丁
#
这个补丁能支持其他一些流行的附加产品,例如 Qmail-Scanner
patch -p1 < $QM_GZDIR/qmailqueue-patch
#
针对 qmail-local qmail-pop3d 能和 maildir++ quota 兼容而打补丁
patch –p1 < $QM_GZDIR/qmail-maildir++.patch
#
针对本地时间戳打补丁,使邮件头上的时间显示为本地时间而不是 GMT
patch -p1 < $QM_GZDIR/qmail-date-localtime.patch.txt
###### 支持 badmailfrom 的日志记录以及 badrcptto 功能。
######patch < $QM_GZDIR/qmail-badmailfrom-badrcptto.patch.txt

tar zxvf qmail-smtpd-auth-0.31.tar.gz //安装smtp-auth补丁,支持smtp认证  

cp qmail-smtpd-auth-0.31/base64.* qmail-1.03 

patch -d qmail-1.03 < qmail-smtpd-auth-0.31/auth.patch

cd qmail-1.03 

patch –d ../qmail-1.03 < qmail-smtpd.patch

# 修改qmail-smtpd.c ,以防止远程服务器发送非法格式的邮件,导致服务死循环。
vi qmail-smtpd.c
在大约 51 行左右把 straynewline 函数的 451 修改成 553

patch -p1 < ../qmail-1.03.errno.patch  针对linux 企业版补丁

make

make setup check  

 

cd ~alias

touch .qmail-postmaster .qmail-mailer-daemon .qmail-root
chmod 644 ~alias/.qmail*

cd qmail-1.03
./config-fast mail.abc.com

vi /var/qmail/rc

env env - PATH="/var/qmail/bin:/usr/local/bin" qmail-start ./Maildir/

chmod +x /var/qmail/rc

 









 

四、            安装vpopmail

groupadd -g 89 vchkpw
useradd -g vchkpw -u 89 vpopmail
tar xzvf vpopmail-<?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />5.3.30.tar.gz
cd vpopmail-5.3.30

###./configure --enable-mysql=y --enable-roaming-users=y --enable-mysql-logging=y --enable-clear-passwd=y
--enable-default-domain=yourdomain.com --enable-defaultquota=50M
--enable-incdir=/opt/mysql/include/mysql --enable-libdir=/opt/mysql/lib/mysql
这里不加数据库


  


  

(注:--enable-roaming-users=y表示允许漫游的用户使用该邮件系统)

--enable-passwd=n 不启用/etc/passwd验证

配置完显示的参数

(vpopmail 5.3.30          

            Current settings

---------------------------------------

 

vpopmail directory = /home/vpopmail

               uid = 89

               gid = 89

          ip alias = OFF --enable-ip-alias-domains=n (default)

address extentions = OFF --enable-qmail-ext=n (default)

rebuild tcpserver file = YES  --enable-rebuild-tcpserver-file=y (default)

     roaming users = OFF --enable-roaming-users=n (default)

        user quota = 200M -enable-hardquota=200M

     domain quotas = OFF --enable-domainquotas=n (default)

table optimization = many domains --enable-many-domains=y (default)

       auth module = cdb (default)

  system passwords = OFF --enable-passwd=n (default)

      file locking = ON  --enable-file-locking=y (default)

         file sync = OFF --enable-file-sync=n disable vdelivermail fsync

                         (default)

     make seekable = ON  --enable-make-seekable=y (default)

      auth logging = ON  --enable-auth-logging=y (default)

     mysql logging = OFF --enable-mysql-logging=n (default)

      clear passwd = ON  --enable-clear-passwd=y (default)

     users big dir = ON  --enable-users-big-dir=y (default)

 valias processing = OFF --enable-valias=n

      mysql limits = OFF --enable-mysql-limits=n (default)

        pop syslog = show only failure attempts

                     --enable-logging=e (default)

          auth inc = -Icdb

          auth lib =

)
make
make install-strip

也可以提醒发件人,收件人的磁盘已满:
echo "Message rejected. Not enough storage space in user's mailbox to accept message." > /home/vpopmail/domains/.over-quota.msg

Cd /home/vpopmail/bin

./vadddomain test.com

./vadduser [email]hd@test.com[/email]

cp vchkpw vchkpw-smtpd

chown vpopmail:vchkpw vchkpw-smtpd

chmod 4755 vchkpw-smtpd

cd /home/vpopmail/etc/

vi tcp.smtp     //加入一下内容

127.0.0.1:allow,RELAYCLIENT=""

#/usr/local/bin/tcprules /home/vpopmail/etc/tcp.smtp.cdb /home/vpopmail/etc/tcp.smtp.tmp < /home/vpopmail/etc/tcp.smtp

 

建立Qmail的服务日志目录,并给Qmail加上权限

mkdir -p /var/log/qmail/qmail-smtpd

mkdir -p /var/log/qmail/qmail-pop3d

mkdir -p /var/log/qmail/qmail-send

chmod -R 755 /var/log/qmail

chown -R qmaill:root /var/log/qmail

配置svscan

最好建立以下内容的一个脚本,执行它:

#!/bin/sh

chmod 755 /service

mkdir /var/qmail/supervise

chmod 755 /var/qmail/supervise

 

mkdir /var/qmail/supervise/qmail-smtpd

mkdir /var/qmail/supervise/qmail-smtpd/log

chmod +t /var/qmail/supervise/qmail-smtpd

 

mkdir /var/qmail/supervise/qmail-send

mkdir /var/qmail/supervise/qmail-send/log

chmod +t /var/qmail/supervise/qmail-send

 

mkdir /var/qmail/supervise/qmail-pop3d

mkdir /var/qmail/supervise/qmail-pop3d/log

chmod +t /var/qmail/supervise/qmail-pop3d

 

ln -s /var/qmail/supervise/* /service/

 

提示:mkdir: cannot create directory `/service': File exists

下面是pop3d的启动脚本:(linux 下注意vpopmail的路径)

1.  vi /var/qmail/supervise/qmail-pop3d/run

#!/bin/sh

exec /usr/local/bin/tcpserver -H -R -v -c100 0 110 \

/var/qmail/bin/qmail-popup host.domain.de \

/usr/local/vpopmail/bin/vchkpw \

/var/qmail/bin/qmail-pop3d Maildir 2>&1

将这个脚本放入 /var/qmail/supervise/qmail-pop3d/ run 文件中,然后:

再将pop3dlog启动脚本:

2.  vi /var/qmail/supervise/qmail-pop3d/log/run

#!/bin/sh

exec /usr/local/bin/setuidgid qmaill /usr/local/bin/multilog t s100000 n20 \

/var/log/qmail/qmail-pop3d 2>&1

放入 /var/qmail/supervise/qmail-pop3d/log 中的 run 文件中,之后执行:

 

chmod 755 /var/qmail/supervise/qmail-pop3d/run

chmod 755 /var/qmail/supervise/qmail-pop3d/log

chmod 755 /var/qmail/supervise/qmail-pop3d/log/run

smtpd的启动脚本:

3.  vi /var/qmail/supervise/qmail-smtpd/run

#!/bin/sh

QMAILDUID=`/usr/bin/id -u qmaild`

NOFILESGID=`/usr/bin/id -g qmaild`

exec /usr/local/bin/tcpserver -p -R -x \

/usr/local/vpopmail/etc/tcp.smtp.cdb -u"$QMAILDUID" \

-g"$NOFILESGID" -v -c100 0 smtp rblsmtpd \

/var/qmail/bin/qmail-smtpd 2>&1

放入 /var/qmail/supervise/qmail-smtpd run 文件中。

配对的还有smtpdlog启动脚本:

4.  vi /var/qmail/supervise/qmail-smtpd/log/run

#!/bin/sh

exec /usr/local/bin/setuidgid qmaill /usr/local/bin/multilog t s100000 n20 \

/var/log/qmail/qmail-smtpd 2>&1

放入 /var/qmail/supervise/qmail-smtpd/log/ 中的 run 文件中。之后执行:

 

chmod 755 /var/qmail/supervise/qmail-smtpd/run

chmod 755 /var/qmail/supervise/qmail-smtpd/log

chmod 755 /var/qmail/supervise/qmail-smtpd/log/run

无尽的长夜呀,还有一个qmail send要搞!将这个脚本:

5.   vi /var/qmail/supervise/qmail-send/run

#!/bin/sh

exec /var/qmail/rc

放入 /var/qmail/supervise/qmail-send/ 中的 run 文件里。并将以下配对的log启动脚本:

6.  vi /var/qmail/supervise/qmail-send/log/run

#!/bin/sh

exec /usr/local/bin/setuidgid qmaill /usr/local/bin/multilog t s100000 n20 \

/var/log/qmail/qmail-send 2>&1

放入 /var/qmail/supervise/qmail-send/log 中的 run 文件,最终曙光来到了,我们执行以下命令:

 

chmod 755 /var/qmail/supervise/qmail-send/run

chmod -R 755 /var/qmail/supervise/qmail-send/log

chmod -R 755 /var/qmail/supervise/qmail-send/log/run

设置系统启动脚本

vi qmail.sh

#!/bin/sh

case "$1" in

start)

echo -n "Starting qmail: svscan"

if cd /var/qmail/supervise; then

env - PATH="/var/qmail/bin:/usr/local/bin:/usr/bin:/bin" svscan &

echo $! > /var/run/svscan.pid

fi

echo "."

;;

stop)

echo -n "Stopping qmail: svscan"

kill `cat /var/run/svscan.pid`

echo -n " qmail"

svc -dx /var/qmail/supervise/*

echo -n " logging"

svc -dx /var/qmail/supervise/*/log

echo "."

;;

stat)

cd /var/qmail/supervise

svstat * */log

;;

doqueue|alrm)

echo "Sending ALRM signal to qmail-send."

svc -a /var/qmail/supervise/qmail-send

;;

queue)

/var/qmail/bin/qmail-qstat

/var/qmail/bin/qmail-qread

;;

reload|hup)

echo "Sending HUP signal to qmail-send."

svc -h /var/qmail/supervise/qmail-send

echo "Sending HUP signal to qmail-pop3d."

svc -h /var/qmail/supervise/qmail-pop3d

;;

pause)

echo "Pausing qmail-send"

svc -p /var/qmail/supervise/qmail-send

echo "Pausing qmail-smtpd"

svc -p /var/qmail/supervise/qmail-smtpd

echo "Pausing qmail-pop3d"

svc -p /var/qmail/supervise/qmail-pop3d

;;

cont)

echo "Continuing qmail-send"

svc -c /var/qmail/supervise/qmail-send

echo "Continuing qmail-smtpd"

svc -c /var/qmail/supervise/qmail-smtpd

echo "Continuing qmail-pop3d"

svc -c /var/qmail/supervise/qmail-pop3d

;;

restart)

echo "Restarting qmail:"

echo "* Stopping qmail-smtpd."

svc -d /var/qmail/supervise/qmail-smtpd

echo "* Sending qmail-send SIGTERM and restarting."

svc -t /var/qmail/supervise/qmail-send

echo "* Restarting qmail-smtpd."

svc -u /var/qmail/supervise/qmail-smtpd

echo "* Sending qmail-pop3d SIGTERM and restarting."

svc -t /var/qmail/supervise/qmail-pop3d

;;

cdb)

tcprules /home/vpopmail/etc/tcp.smtp.cdb /home/vpopmail/etc/tcp.smtp.tmp < /home/vpopmail/etc/tcp.smtp

chmod 644 /home/vpopmail/etc/tcp.smtp*

echo "Reloaded /home/vpopmail/etc/tcp.smtp."

;;

*)

echo "Usage: $0 {start|stop|restart|doqueue|reload|stat|pause|cont|cdb|queue}"

exit 1

;;

esac

exit 0

在你快乐之余不要忘记要给启动脚本执行权限:

 

chmod +x /usr/local/etc/rc.d/qmail.sh

 

到此qmail基本功能配置完成。Qmailadmin sqwebmail没有弄了

测试:

       telnet 到本机 25端口。如果不成功,察看本机防火墙是否开启25110口。

以及 /usr/sbin 下的 sendmail 连接到 /var/qmail/bin/sendmail

/usr/lib  下的 sendmail 连接到 /var/qmail/bin/sendmail

找到问题了。如果提示访问拒绝。变更/home/vpopmail 权限。让qmaild能够访问此目录。如果还不行,将/home/vpopmail/etc目录变更权限755.

故障处理:qmailadmin删除帐户后,再次添加帐户出问题,说帐户已存在,进入/home/vpopmail/domain/ihandy.cn/删除要添加的隐藏的帐户名,再次添加ok

8qmailadmin——WEB方式管理qmail


  1)ezmlm
的安装

tar -xvzf ezmlm-0.53.tar.gz

tar -xvzf ezmlm-idx-0.40.tar.gz  

cp -rf ezmlm-idx-0.40/* ezmlm-0.53/

cd ezmlm-0.53

patch < idx.patch
patch –p1 < ../ezmlm-idx-0.53.400.unified_41.patch

    $make


    $make man


    #make setup

#汉字GB2312支持  

make ch_GB

make setup


  2)autorespond
的安装

    tar zxvf autorespond-2.0.2.tar.gz

cd autorespond-2.0.2


    gcc -Wall -o autorespond autorespond.c


    cp autorespond /usr/local/bin/autorespond


  3)qmailAdmin
的安装


   
在安装前首先要考虑满足以下几项要求:


     a.
是否拥有一个vpopmail用户vchkpw


     b.cgi-bin
目录的所在位置


     c.ezmlm
目录的所在位置


     d.autorespond
目录的所在位置


   
如果能够达到以上要求,可以继续安装     


    #./configure --enable-modify-quota=y
启用ie修改邮箱容量

 

Current settings

---------------------------------------

 

       cgi-bin dir = /usr/local/apache/cgi-bin

          html dir = /usr/local/apache/htdocs

         p_w_picpath dir = /usr/local/apache/htdocs/p_w_picpaths/qmailadmin

         p_w_picpath URL = /p_w_picpaths/qmailadmin

      template dir = /usr/local/share/qmailadmin/

         qmail dir = /var/qmail

      vpopmail dir = /home/vpopmail

         ezmlm dir = /usr/local/bin/ezmlm

         ezmlm idx = yes

 

如果安装的是apache2

Cd qmailadmin-1.0.12

./configure --enable-modify-quota=y --enable-htmldir=/usr/local/apache2/htdocs --enable-cgibindir=/usr/local/apache2/cgi-bin/ --enable-p_w_picpathdir=/usr/local/apache2/htdocs/p_w_picpaths/qmailadmin( 路径不能变)
    #make


    #make install-strip 


   
检测安装是否正确:浏览器中打开路径[url]http://mail.mydomain.com/cgi-bin/qmailadmin[/url],


   
看根据前面设置的用户和密码是否能够成功登录进去。


 9
SqWebmail——一种Webmail解决方案


  1)
安装SqWebmail 


    #tar xvfz sqwebmail-3.5.0-CN.tar.gz


    #cd sqwebmail-3.5.0


  
#./configure --without-authpam --without-authuserdb --enable-webpass=no /


       --without-authpwd --without-authshadow

./configure --without-authpam --with-db=db (如果你没有安装GDBM库,那么请加上这个,默认系统如果找到了GDBM库会使用GDBM库的) --enable-webpass=yes --without-authpwd --without-authshadow --without-authmysql --with-authldap --with-authuserdb --with-authpwd --with-authvchkpw --without-authdaemon \\激活web页面修改密码功能模块--with-maxformargsize=52428800 --with-maxmsgsize=52428800 --enable-softtimeout=1200 --enable-p_w_picpathdir

 

使用这项可成功

安装apache2 需要设置具体图片路径:

改变默认字符集:

sqwebmail-3.5.0/sqwebmail/html/en-us/ CHARSET里面的内容设成gb2312(使sqwebmail的默认字符变成gb2312

rfc2646create.c替换sqwebmail-3.5.0/rfc2045/rfc2646create.c (可以解决sqwebmail发邮件后75行出现乱码问题)这里rfc2646create.c文件是出现乱码的补丁文件。

./configure --without-authpam --enable-webpass=yes --without-authpwd --without-authshadow --without-authmysql --with-authldap --with-authuserdb --with-authpwd --with-authvchkpw --without-authdaemon --with-maxformargsize=10485760 --with-maxmsgsize=10485760 --enable-softtimeout=1200 --enable-cgibindir=/usr/local/apache2/cgi-bin/ --enable-p_w_picpathdir=/usr/local/apache2/webmail/ --enable-unicode= ISO-8859-1,US-ASCII,GB2312  (10485760 10M附件)

#make configure-check
    #make 
    #make check
    #make install-strip
    #make install-configure  
   
检测安装是否正确:浏览器中打开路径[url]http://mail.mydomain.com/cgi-bin/sqwebmail[/url]

 

Vi /usr/local/apache/index.html 内容如下:

 

<html>

     <head>

     <title>MAIL SYSTEM</title>

     <meta http-equiv=Content-Type content=test/html;charset=gb2312>

     <meta http-equiv=refresh content=0;url=http://mail1.9688.net.cn/cgi-bin/sqwebmail>   //改成自己

     </head>

     <body bgcolor=#FFFFFF test=#000000>

     </html>

ie打开  mail1.9688.net.cn


  2)
安装vqsignup


    #tar xvfz vqsignup-0.4.tar.gz


    #cd vqsignup-4.0


   
按照INSTALL安装(?)




   
安装这个软件包可能比较麻烦,需要一些耐心。


    a.
修改Makefile文件:


       FLAGS=-I/home/vpopmail/include


      
修改-I/home/vpopmail/include指到真实的vpopmail/include目录




      
修改下面的这行


       $(CC) $(FLAGS) -o $(BIN) $(OBJS) -L/home/vpopmail/lib -lvpopmail -lcrypt


      
修改 -L/home/vpopmail/lib 为真实的vpopmail lib的目录




    b.
编译


       #make




    c.
安装


      
拷贝signup.cgisignup.conf文件到cgi-bin目录下


      
切换目录到cgi-bin目录下      


       #chown vpopmail signup.cgi


       #chgrp vchkpw signup.cgi


       #chmod ug+s signup.cgi


       #chmod ugo+r signup.conf




      
拷贝vqsignup_html目录到cgi-bin目录下,确信对所有用户可读


      
拷贝vqsignup.html文件到DocumentRoot目录下,确信能够被访问。




      
编辑cgi-bin目录下的vqsignup.conf文件


      
修改"add_domain"的所有行,加上你的真实的域,把其他的行删除掉




      
更改vqsignup_text/*.html文件,使包含"result_*"的行的路径指到正确的全路经。




     
修改vqsignup_text目录下所有的文件,使它们只包含你想支持的域,你也可以定制这些页面,使?br>歉雍每葱?


     
修改DocumentRoot目录下vqsignup.html文件,使它只包含你想支持的域,你也可以定制这个页面?br>顾雍每葱?


    d.
测试


      
用你的浏览器访问[url]http://your[/url] web server/your sub dir/vqsignup.htm,
试着注册新用户,如果成功的话,


     
那么就恭喜你了。

 

添加固定用户邮箱空间

./vadduser -q 200M [email]q3@homesun.com.cn[/email] abc123

 

qmail故障处理:

       qmail在运行期间,如果在/var/log/qmail/qmail-send/current文件中一直出现以下错误:

delivery 11: deferral: Unable_to_chdir_to_maildir._(#4.2.1)/

@40000000458a5ded140c6494 status: local 0/10 remote 0/20

@40000000458a5eb01130044c starting delivery 12: msg 82470 to local [email]root@mail.ihandy.cn[/email]

@40000000458a5eb011301fa4 status: local 1/10 remote 0/20

@40000000458a5eb011498f5c delivery 12: deferral: Unable_to_chdir_to_maildir._(#4.2.1)/

@40000000458a5eb01149a6cc status: local 0/10 remote 0/20

@40000000458a5eb5113f17ac starting delivery 13: msg 84228 to local [email]root@mail.ihandy.cn[/email]

@40000000458a5eb5113f2f1c status: local 1/10 remote 0/20

@40000000458a5eb5115781ac delivery 13: deferral: Unable_to_chdir_to_maildir._(#4.2.1)/

解决方法:

postmaster@域名 加入到 /var/qmail/alias下的.qmail-postmaster  .qmail-root ,就可以解决了。

()系统好像是找不到postmaster#mail.gbunix.com,但是我的真正的邮箱是postmaster#gbunix.com,日志中还出现了root#mail.gbunix.com的情况。进行以上方法后没有解决。不知道什么原因。最后在/var/qmail/alias/.qmail-postmaster.qmail-root中指定了一个真实的邮件地址postmaster#gbunix.com后正常,不过postmaster#gbunix.com收到大量的发给root用户的邮件和失败邮件。

2:邮件队列清除   /var/qmail/queue

(1);可以安装 qmail-remove

2):停止qmail

(3) : mkdir /var/qmail/queue/yanked  建立目录

4):运行 qmail-remove –r

(5) : 启动 qmail

如想在队列中的邮件马上传递,可以kill HUP qmail-send 

防止不存在帐户也接收邮件

设置.qmail-default文件

vi /var/qmail/alias/.qmail-default

/var/vpopmail/bin/vdelivermail '' bounce-no-mailbox

这样垃圾邮件发过来,如果是一个不存在的邮箱,会自动弹回邮件,并告知no this mailbox
6qmail 群发帐号限制
首先web登陆qmail管理界面,进入邮件列表,创建群发帐号(如all),然后添加进一个允许群发的帐号( t1),然后退出,在进入 aliases forwards ,选择 add new forwards ,  Forward Email Address: 帐号为普通用户帐号 t1Local Name: 帐号为群发的帐号 all

这样就完成了群发帐号的限制。