qmail邮件用户完全可以与系统用户分开,把用户信息都放在MYSQL/POSTGRESQL中.
1 d) K0 F+ V, q* E0 `1 J$ N8 I; h" {# |+ Y
具体实践起来可以多看看QMAIL的帮助,做好思想准备,心脏不好者请慎重考虑
! n7 g( P/ f2 Z
现在许多做的FREEMAIL系统都是使用非系统用户帐号,有的甚至编写自己的FILE SYSTEM,效率更高。
9 v; [! @- G+ w' m
* t+ x* w) @. ^* V
# W, t+ \4 i- g' k0 B z& N; c _环境
+ V+ f( k Q! a
----
/ }9 ?+ X1 P3 v) B1 \" {6 t7 R9 t, g/ D! G- W
RedHat6.2(2.2.12-20)+mysql.3.22.30+qmail1.03+checkpassword0.81,
7 |2 S9 R5 y/ I1 H0 U' k. u1 J. [ 测试过的PATCH为1.0和1.1。
' v1 S+ E0 L2 e$ w/ [. m* f
" W0 j/ Q% h: H1 X/ d% @) g 数据库名设为QMAIL,QMAIL是按默认设置安装在/var/qmail下,
8 [- H w6 j3 h
下载的源文件都放在 /usr/local/src下
& Q3 P# W( P5 D" k k+ x O; ]下载
0 w' V4 Q( {- h8 c. a. r
----
$ {7 S+ [1 o. l( I1 q, L; T v5 ~) @) y, G2 C9 |* u3 y6 b4 ?
QMAIL:
http://cr.yp.to/software/qmail-1.03.tar.gz
* O" |- U( Z4 u& ^! ^* f9 U, G CHECKPASSWORD:
http://cr.yp.to/software/checkpassword-0.81.tar.gz 0 r& b* N$ x' p- d) b4 b
PATCH:
http://iain.cx/unix/qmail/download/
+ ~: }( r1 ^6 {6 R/ q1 N MYSQL:
http://www.mysql.com/downloads/index.html
: o: P( j" _. l+ ^. L/ w+ z
6 z6 U" P* Z* x7 F% [" l5 o8 m" r Z! n% k% `' d! I9 S
安装
* S7 l2 W, P# F( g----
$ z. n! g4 m6 G. P! y0 c/ K4 g6 V/ _) D0 ]
' P' }0 J: ~. S5 s 建立数据库,结构如下:
_/ x# d% _2 H, q: K/ E9 o
CREATE TABLE alias (
) u8 v& E9 m) d7 B' n6 V" ] username varchar(32) DEFAULT '' NOT NULL,
2 S# `5 K4 w6 ~5 Z1 [! z* ^( C
alias varchar(64) DEFAULT '' NOT NULL,
: E! i3 m) Z9 C% F
alias_username varchar(32) DEFAULT '' NOT NULL,
' e: m7 }/ F4 h6 W- ^
alias_host varchar(64) DEFAULT '' NOT NULL,
( R" T3 Y4 V- b: ]# M2 ~* ~
KEY username (username),
3 u9 H9 K6 I, _" w1 f" ? m* O+ S6 g
KEY alias (alias),
* G- K8 j4 }) ]2 Q( s% R
UNIQUE user_alias (username,alias,alias_username,alias_host)
[6 y. x' H' Z" N6 o1 D* D( Y
);
+ L) n' }5 G& F) d5 f+ m
6 \- Y5 k7 b' C3 z4 \7 y CREATE TABLE mailbox (
* q" u4 A% @: b8 F
username varchar(32) DEFAULT '' NOT NULL,
8 F5 o, T$ [" [0 E uid mediumint(9) DEFAULT '0' NOT NULL,
& S! z: L7 n- c- T
gid mediumint(9) DEFAULT '0' NOT NULL,
4 f$ ]8 b2 I! ~; i. u! X4 v+ @ home varchar(64) DEFAULT '' NOT NULL,
7 z1 x% Q0 d9 ^; D
password varchar(16) DEFAULT '' NOT NULL,
* ~) {' C( G" m5 \ PRIMARY KEY (username),
0 m4 j3 r% n- Y" Q5 ]' `
UNIQUE home (home),
) v9 W2 O3 l: T& z, \5 \5 d, u KEY password (password)
* [! G. O5 @& n );
% @5 ^+ P7 j+ X+ G# u* v
# N- e2 N% w! @3 \' [) u CREATE TABLE rcpthosts (
" e- ~+ U+ V: R% S7 K! j; S
host varchar(64) DEFAULT '' NOT NULL,
' }1 _- v3 p v PRIMARY KEY (host)
. J1 }$ Z$ x8 Y' n4 ~1 a );
2 E& e( K1 E* `8 i) M; V
5 C) D0 {" x6 j% T CREATE TABLE virtual (
+ ?8 G' c( F7 l) r* b5 _
username varchar(32) DEFAULT '' NOT NULL,
# |0 W( _! E* s( W5 a1 u* i4 `7 w ext varchar(64) DEFAULT '' NOT NULL,
* T- n& v$ e: R9 t
virtual_username varchar(32) DEFAULT '' NOT NULL,
, x: E! Z. \* ?" \
virtual_host varchar(64) DEFAULT '' NOT NULL,
! K( u' D8 w* i b PRIMARY KEY (virtual_username,virtual_host),
+ F6 R8 m( _ A5 ?+ w. R
KEY (virtual_username),
- u$ U2 G3 V& ]' \. v; ^ KEY (virtual_host),
0 f# P6 ]) U, K8 e1 ]9 R UNIQUE virtual (username,ext,virtual_username,virtual_host)
/ v8 J8 K" n8 \ d* w, |3 y, x; e );
8 Z0 D$ h) J4 _0 N$ W y( z6 x, i$ s# N! L3 M
5 q$ Z, ^+ q3 n# L2 c$ i1 b安装QMAIL,CHECKPASSWORD
$ }5 X" ~# y) R3 X# A) I* ?. a/ B
------------------------
& }; k5 l' i- i
2 |, a0 M* {" W5 w7 S u7 v0 {- ~ tar xzvf qmail-1.03.tar.gz
( W, C p7 `& B0 e, H( {# @/ X6 q+ f+ W
mkdir /var/qmail
. Z! n4 K9 _% B, g* z3 ]7 f) t
groupadd nofiles
W( T v: z3 w2 C( Z useradd -g nofiles -d /var/qmail/alias alias
. w! a# y4 O- ?8 `% \! i- u useradd -g nofiles -d /var/qmail qmaild
3 @. l% I; E7 u$ {& W( B
useradd -g nofiles -d /var/qmail qmaill
- |, R( c$ u$ Z( L4 E! g- {3 s! N
useradd -g nofiles -d /var/qmail qmailp
% ~3 T% C' e* ` z6 T groupadd qmail
" e( ?) P/ B" w+ }% {3 N4 u8 l3 w
useradd -g qmail -d /var/qmail qmailq
# f- @5 ~$ P# R& y$ I useradd -g qmail -d /var/qmail qmailr
4 C- m7 F1 S6 T. y! L0 [8 G useradd -g qmail -d /var/qmail qmails
# Z4 o' E/ ]/ Q. g5 H! s
make setup check
) V4 O2 r# `0 g1 K ./config或者 ./config-fast your.full.host.name
6 _$ w' S! s" c) F
1 r# @. u' W6 X# A* A. S; { {8 g
注:config 根据DNS来确认主机名+域名,在config后,
. ]5 O% ]7 f/ m8 a# I3 o 再config-fast 域名,不然收发邮件都有一个小问题。
0 P* t& ]: c; ~/ q; f+ x
! l/ Z. m: g v建立系统别名
. b8 ]9 @+ W7 ? n1 Z% j. E2 m' C------------
V: l% P! d" s: U! q* n
7 ^8 w: [; r L; p. A' x* b+ Y cd ~alias; touch .qmail-postmaster .qmail-mailer-daemon .qmail-root
. }* R6 @1 ~' r1 X
将要设定的用户加入了别名中去
( R9 c2 k& O. q l' h% W6 V+ d
echo xxxx >>.qmail-postmaster ...
3 \& l4 q5 G3 m2 [; h: e chmod 644 ~alias/.qmail*
3 K) }# p2 v$ Y- t; a
0 z8 ~/ b% ?2 v
cp /var/qmail/boot/home /var/qmail/rc
& u8 r2 N% I, n, a4 z; \/ u0 u" Y7 m 修改rc,将./Mailbox修改为./Maildir/
7 T0 t% l" j4 P8 D, u# J7 R
现在编译的QMAIL是让其支持Maildir格式,如要支持/var/spool/mail格式,只需
$ Z) j: V9 o& v
cp /var/qmail/boot/proc /var/qmail/rc
7 G3 z( q: I; ~& @* }! d
让QMAIL在系统启动时自动启动
4 O4 \! h3 E3 b% W- L4 |* D echo "csh -cf '/var/qmail/rc &'" >> /etc/rc.d/rc.local
. ?( p8 k& q( Q0 ]% c' W' {' A& M6 o' r% o% H0 B$ k
安装checkpassword
0 m0 t6 g' H n- l
-----------------
. q" g$ ^& @+ K1 F* ^+ f2 Q: F# Y. D! h, Y6 ^+ S
解压:tar -zxvf checkpassword-0.81.tar.gz
4 r+ u7 r$ |0 l: ^* @; I' N2 I/ ?
进入解压后的目录执行
) ^0 x* Z0 H* e" M5 b7 s
make
' H8 T9 N; D; H; \3 N# c
make setup check就可以了。
6 \9 U6 s" }5 g+ X6 y1 g* S
现基本的QMAIL已经安装完成了,要增加一个系统用户如ABCD需以下步骤:
# H9 l5 B8 q+ u/ f /usr/sbin/useradd abcd;/usr/bin/passwd abcd 设好口令
) I) q2 A8 t" N( j 以此用户名登录,到此用户的HOME目录下:cd;
4 f* m$ n2 ^6 L5 _1 Y7 M6 S+ l" F /var/qamil/bin/maildirmake Maildir
+ v F3 y1 \! n# V# C* ]' N9 P4 K4 {
echo ./Maildir/ >.qmail 这样就好了。
2 t5 F$ v; F( ^. n* Z8 e' f
以存在的用户使用Maildir:
( f9 W# Z5 X1 l 以ROOT的话,可以直接su 用户名或直接以root身份在所需用户的HOME目录下
" s% v% ?. R' H+ K8 s
建立Maildir 及.qmail
* q/ I @0 A! n% k. H 然后再chown -R 该用户名.该用户组名 用户的HOME目录名。
$ {% k- u: ]5 i" u5 M, @; C
, G5 ^1 S m g
如以后还建系统用户,可使用以下步骤:
N8 K& T# n( A 在/etc/skel下建立echo ./Maildir/ >.qmail
/ V, d" F* u% k# D8 ] /maildirmake Maildir
- J- B v6 R0 t# C2 P3 K 以后建一个用户就会自动建立Maildir .qmail了
2 A$ N7 ?8 G: f/ `4 D
' I/ V# | v4 ~9 K1 m! }/ _
使QMAIL支持数据库
$ o- @+ E# c5 C, q* {: S-----------------
3 ]" `# j5 G G# r# R* k" t" @
" K+ S% C3 s3 u! P! s
建立一个MYSQL帐号,设帐号名为MAIL
! v, B0 V: F* o8 n GRANT ALL ON QMAIL.* TO MAIL@LOCALHOST IDENTIFIED BY "

ASSWORD"
. ^* X) |! h0 l0 D# }+ B3 c
测试一下mysql -umail -p
6 }) R& K" P' Z$ H' [ 建立一个sqlserver文件,包含以下内容
- z- j+ r* x+ o; O* Z8 s& J
server localhost
2 z8 b2 _. p) a) O
login mail
# F) l3 E" y5 H8 r- E" R M password mail
0 k$ }9 _: G, e% E! W5 D9 _
db qmail
2 _0 H$ {- R- P
port xxx
/ C* x- f. w' ?$ K& E socket xxx
- X5 ]' O/ Y! S( T 只能以一空格键分开,或用等号连接.,将其复制到/VAR/QMAIL/CONTROL,属于
3 i2 |! m( \: @5 W0 h( r QMAILP.QMAIL-RW-R-R--
( Z3 | q& U V* m4 s1 N J5 y6 P
此文件的权限及设置都必须正确,不然会出现OUT OF MEMORY之类的出错信息。
7 Y( B* E3 S. h7 Q) \" ^
- Y% C1 k; ^, j1 h8 D
PATCH qmail及checkpassword
3 r& N- r% Z! |
gunzip qmamil及checkpassword的PATCH文件
, p) b1 J0 ~. x9 G' f$ W- X' P! { 进入 qmail-1.03及checkpassword-0.81目录,修改Makefile中的MYSQL_LIB及
* g# Z* ]9 d. O+ O O( |& a7 n. x MYSQL_INCLUDE指向正确的目录。
- T+ F6 b) J' \, [" w! V
6 }, [ O, T# c& x2 T, A9 C* s3 H. K 然后
6 h. k+ T; S; q2 [2 r+ I4 ^" `
QMAIL: patch -p1 <qmailpatchfilename
: Q/ z [; Y3 x# h, W
make setup check
5 \6 B1 o N" }% i7 u5 r7 Y( J
checkpassword: patch -p1 <checkpasswordfilename
3 ]3 k& L& z& b/ `% S1 O% i make
# W$ N9 U* x3 J) w make setp check
4 A& ?' O& B* a6 I1 [
& Y! W6 B& L5 `' T6 ?- N
从Sendmail向Qmail迁移
. q4 }- U6 R5 q" O
---------------------
) Q1 e4 T$ Z; E7 N! x
4 I: G6 q. b X: x# h" h, v- M 在/etc/inetd.conf文件中修改或加入smtp ,pop-3(各一行)
) f+ \. ~3 ?8 r/ q; ~' Z- V& N3 D smtp stream tcp nowait qmaild /var/qmail/bin/tcp-env
' c8 O. B+ s& L. e1 @5 g* R tcp-env /var/qmail/bin/qmail-smtpd
2 A0 ]8 d: \3 K" X2 f# }; H
+ Z4 \" X) [3 B3 M6 M) R, b3 t
pop-3 stream tcp nowait root /var/qmail/bin/qmail-popup
0 x4 o6 S- k5 F, C0 F0 @% _ qmail-popup host.domainname /bin/checkpassword /var/qmail/bin/ \
. B, ^' H5 Q* t4 q9 B0 ?4 R; H qmail-pop3d Maildir
H# D) j5 C- [) w0 I$ c6 S
3 r1 d3 m8 a* Y- r 具体内容在QMAIL的DOC目录,REMOVE.sendmail有详细介绍。
`4 M/ y2 N8 a# G. W- \" C; e( L. g 将sendmail的启动语句注释掉,可以试一下/usr/sbin/ntsyv
6 Z5 D* l) i1 w- ]4 F 再杀掉Sendmail进程.
# z6 V$ Q; g! w# u- m% A
3 |# ^+ S N9 o4 O0 y' l+ d chmod 0 /usr/lib/sendmail
1 h( G8 V9 F* Z9 v) M
chmod 0 /usr/sbin/sendmail
( N5 O' R' Z# K/ Q# d& l4 K chmod 0 /usr/lib/sendmail.mx
, i; ^4 U$ v# O% ?- H) F9 R
mv /usr/lib/sendmail /usr/lib/sendmail.bak
; ]9 Z2 X0 k3 ]) R( w
mv /usr/sbin/sendmail /usr/sbin/sendmail.bak
. P. |+ I+ U! }8 s9 v0 L
ln -s /var/qmail/bin/sendmail /usr/lib/sendmail
! }# S! w. T7 ?9 C7 o
ln -s /var/qmail/bin/sendmail /usr/sbin/sendmail
5 O9 A8 u, e8 Y5 `) K killall -HUP inetd
1 i8 Y# k9 v9 R G) Y$ D
% E5 h x8 a$ w+ q 将现有的SENDMAIL邮件迁移到QMAIL下
! X9 i- ?/ a% m! R
可以在用户HOME目录Maildir/new下建立一个到/var/spool/mail/用户名的连接
% x. j% a( d G& N# M
我是直接将/var/spool/mail/用户名 cp -p 至/home/用户名/Maildir/new下。
% c$ n9 e5 L! G J" d
如用sendmail的alias需要fastforward,所以我另外建了qmail的alias
5 A3 I& M1 n& T
( m7 B3 c' k) k+ `1 i测试
" m2 p+ d+ P- u----
- W' O# h4 k+ V( J5 v
& F( F8 J% ` q* D 启动mysql带--log选项,以便发生错误时查看mysql log找出原因,
) u0 r" I7 O# y8 z 启动QMAIL (csh -cf '/var/qmail/rc &')
4 B; w! l9 e5 ?4 D w {% r 查看一下QMAIL的进程:ps -ax | grep qmail
1 S% n/ D# s" L- m 检查一下/var/log/maillog的信息
9 X* q& Z5 Z' \6 E7 L; |* c 发给一个系统用户,看有没有收到信,如有错误检查home目录Maildir的权限设置
, D& M: i7 a. S* |0 X, f& t4 P
虚拟用户:在MAILBOX表格中输入username,uid,gid,home,password信息
7 u4 o& P; V% S8 e- x4 k
然后再根据所指定的home建立相应的目录,Maildir .qmail 再
6 N2 Y4 h; V( R chown -R uid.gid home目录
5 b' C6 L- c, V$ a& D
测试一下给此虚拟用户发信。
) H1 p2 B) J) w3 I# ? qmail+mysql安装成功的话在/var/log/maillog及mysql的log下都有查寻数据库
0 o8 ^% e# r5 r, ~: q! \ 的信息。
/ X5 `. }2 H) i- @3 {: x- ?& U0 |7 y( Q5 q9 h
配制
, g4 k0 b5 K& H
----
3 }: ?- p6 H t! }) @- ^4 [# e1 z0 z/ j$ X0 ^8 R+ r
为其它主机转信须在/var/qmail/control/rcpthosts添加域名,去到relay限制
6 I X6 s8 @5 ]2 o7 |
可将此文件删除或试一下加入0.0.0.0, 如使用tcpserver可建立/etc/tcp.smtp
, m5 k: u% L, b' [0 A' m' O2 j4 B 来限制relay限制。
: [) X$ C. q3 k# _! U9 w+ a; u5 D" Z3 `
设置主机多个域名:将名称加入
5 P0 X/ i* w# } F' W
/var/qmail/control/local,
) ?. B. N2 D! Y9 e" I+ y5 x
/var/qmail/control/rcpthosts
3 K; P- w9 |' S) v /var/qmail/control/me
+ V; ~% R0 |+ ~) @8 a* W- q: @& } P* M5 A3 [* z5 i' S
别名:
, M7 H# h1 J" j) T
0 R. l& j6 @# D1 { echo "用户">/var/qmail/alias/.qmail-别名
: s0 w$ i7 I7 Q5 i8 c" M" |% M6 Z mailist:跟别名一样,只不过在别名文件中键入多个用户,
/ x* T3 r5 u4 T7 H! n# p& M 每个用户以回车隔开;但存在一个问题当mailist中包括发件人时,发件人发给
- A- C% a1 h& M* f( Q$ D8 f
mailist自己也能收到,以后我会试一下ezmlm。用户可以在自己的目录里建立
' y9 N* ]4 I' e: v5 I
Maillist,如用户名为abc,想建一个Maillist发给一组用户只需在abc的HOME
/ q C7 S: G& n: _ 目录下建立.qmail-test,将用户加入到此文件中,只后只要发给abc-test就行了。
5 }( x4 x; n5 a7 K3 U- p& V# D! ?$ M9 c1 A; Q- b# J* D5 b# e! w
抄送:
- S/ T& b1 c- V$ i% E- U% m* [ 8 I4 M2 D M! G! j2 H+ Q Y
发信给 user1@ab.cd,同时抄送给user2,dd@jite.com
+ X2 m8 S- ]2 b
方法:编辑/home/user1/.qamil 内容如下
8 }9 m0 v L5 G: @
# p/ q" ^1 C- F0 a" p ./Maildir/
4 n* w/ ~6 u# C! b |forward user2 dd@jite.com
. j# [1 S; q: \ u: n' X
9 e2 z& Q4 S+ S# d( {' E6 l, ~; ` 转信:
" O* k9 [) k. R
: y% r- i6 h4 j3 N% N2 b0 D! N
user1@ab.cd转向dd@jite.com
; S' B, p; |8 t7 ]' I* R( \, j
方法:编辑/home/user1/.qamil 内容如下
0 W' ~. z, V I! ~( R
$ x$ y7 Y" f/ v5 Q" Z$ A dd@jite.com
7 M: _! d, v# f; d5 U# A K" J 去掉转信和发信的限止:去掉/var/qmail/control/rcpthosts文件
& S) v: k% F$ ^2 I/ F% r! w5 V
masquerading:
4 w. T* }' ~7 V1 }) U+ U3 F+ O1 c 在/var/qmail/control/defaulhost中加入要伪装的主机名,将此文件设为644
# Y+ @" Z- I9 f5 `
具体实践起来可以多看看QMAIL的帮助。
' U i! U0 n$ Y6 {" ^现在许多做的FREEMAIL系统都是使用非系统用户帐号,有的甚至编写自己的FILE SYSTEM,效率更高。