基于qmail的完整WEBMAIL解决方案安装详解


Posted in PHP onOctober 09, 2006

安装平台:Linux,Solaris
版本:qmail-1.03
安装的机器: mail.mydomain.com

软件包:
qmail-1.03 qmail基本系统
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 服务

 # killall -TERM sendmail (Linux)

 接着以 qmail 之 sendmail libraby 取代原有之 sendmail

 # mv /usr/lib/sendmail /usr/lib/sendmail.old

 # mv /usr/sbin/sendmail /usr/sbin/sendmail.old

 # ln -s /var/qmail/bin/sendmail /usr/lib/sendmail

 # ln -s /var/qmail/sbin/sendmail /usr/sbin/sendmail
移除 sendmail 启动程序,以 Linux 为例:

 移除 inetd.conf 中的 sendmail 之设定,以及 /etc/rc.d/init.d 下的 sendmail 启动档。(Linux)

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 之启动

 请移除 inetd.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

qmailadmin WEB方式管理qmail

1 ezmlm
$ make
$ make man
# make setup

2 autorespond
gcc -Wall -o autorespond autorespond.c
cp autorespond /usr/local/bin/autorespond

3 qmailAdmin

3.1. 在你开始以前还有几件事需要考虑.
a. 你是否有vpopmail 用户而且已经安装了vchkpw
b. 你的 cgi bin 目录的位置
c. 你的 ezmlm 目录的位置
d. 你的 autorespond 目录的位置
如果这些部分你有忽略,那先暂停继续,先把这些搞定吧!!

3.2 install

# ./configure
# make
# make install-strip

浏览器中打开路径http://mail.mydomain.com/cgi-bin/qmailadmin
用户postmaster;域mydomain.com;口令:mydomain

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

vqsignup
# tar xvfz vqsignup-0.4.tar.gz
# cd vqsignup-4.0

按照INSTALL安装

PHP 相关文章推荐
php设计模式之单例、多例设计模式的应用分析
Jun 30 PHP
windows7下安装php的imagick和imagemagick扩展教程
Jul 04 PHP
PHP实现从远程下载文件的方法
Mar 12 PHP
PHP获取数组最大值下标的方法
May 12 PHP
PHP实现恶意DDOS攻击避免带宽占用问题方法
May 27 PHP
PHP之将POST数据转化为字符串的实现代码
Nov 03 PHP
php mysql实现mysql_select_db选择数据库
Dec 30 PHP
深入理解Yii2.0乐观锁与悲观锁的原理与使用
Jul 26 PHP
PHP Class SoapClient not found解决方法
Jan 20 PHP
PHP长连接实现与使用方法详解
Feb 11 PHP
laravel http 自定义公共验证和响应的方法
Sep 29 PHP
PHP中用Trait封装单例模式的实现
Dec 18 PHP
一段php加密解密的代码
Oct 09 #PHP
PHP开发文件系统实例讲解
Oct 09 #PHP
用PHP读取IMAP邮件
Oct 09 #PHP
php+oracle 分页类
Oct 09 #PHP
使用无限生命期Session的方法
Oct 09 #PHP
图象函数中的中文显示
Oct 09 #PHP
使用php+xslt在windows平台上
Oct 09 #PHP
You might like
一个显示效果非常不错的PHP错误、异常处理类
2014/03/21 PHP
Codeigniter框架的更新事务(transaction)BUG及解决方法
2014/07/25 PHP
PHP中加密解密函数与DES加密解密实例
2014/10/17 PHP
PHP屏蔽关键字实现方法
2016/11/17 PHP
php中Redis的应用--消息传递
2017/03/28 PHP
php使用gearman进行任务分发操作实例详解
2020/02/26 PHP
SWFObject Flash js调用类
2008/07/08 Javascript
Javascript this 的一些学习总结
2012/08/02 Javascript
处理及遍历XML文档DOM元素属性及方法整理
2013/08/23 Javascript
JavaScript匿名函数与委托使用示例
2014/07/22 Javascript
轻松创建nodejs服务器(10):处理上传图片
2014/12/18 NodeJs
JavaScript生成随机数的4种自定义函数分享
2015/02/28 Javascript
用js写的一个路由(简单实例)
2016/09/24 Javascript
微信小程序之网络请求简单封装实例详解
2017/06/28 Javascript
JQuery判断正整数整理小结
2017/08/21 jQuery
基于JS实现html中placeholder属性提示文字效果示例
2018/04/19 Javascript
图片文字识别(OCR)插件Ocrad.js教程
2018/11/26 Javascript
解决 viewer.js 动态更新图片导致无法预览的问题
2019/05/14 Javascript
React如何实现浏览器打印部分内容详析
2019/05/19 Javascript
javascript设计模式 ? 工厂模式原理与应用实例分析
2020/04/09 Javascript
vue+animation实现翻页动画
2020/06/29 Javascript
mpvue 项目初始化及实现授权登录的实现方法
2020/07/20 Javascript
深入了解JavaScript词法作用域
2020/07/29 Javascript
vue配置多代理服务接口地址操作
2020/09/08 Javascript
如何利用JS将手机号中间四位变成*号
2020/09/29 Javascript
[01:45]2014DOTA2 TI预选赛预选赛 大神专访第二弹!
2014/05/20 DOTA
Python中的字典遍历备忘
2015/01/17 Python
简单介绍Python下自己编写web框架的一些要点
2015/04/29 Python
Python中函数的参数定义和可变参数用法实例分析
2015/06/04 Python
Django项目uwsgi+Nginx保姆级部署教程实现
2020/04/19 Python
python argparse传入布尔参数false不生效的解决
2020/04/20 Python
详解Python 中的容器 collections
2020/08/17 Python
python中温度单位转换的实例方法
2020/12/27 Python
英语专业个人求职自荐信
2013/09/21 职场文书
史上最全的军训拉歌口号
2015/12/25 职场文书
MySQL主从搭建(多主一从)的实现思路与步骤
2021/05/13 MySQL