CentOS5.1上安装基于postfix的全功能邮件服务器 

一:试验环境介绍

软件:vmware workstation6.02
vm:创建一个redhat as5 vm,8g硬盘,删除软驱和声卡
主机名(hostname):centos
ip:192.168.1.168
dns:192.168.1.1(配置完后,需要修改,指向192.168.1.168,修改/etc/resolv.conf),

邮件服务器的名字为mail.test.com

dns server:ns1.test.com
dns ip:192.168.1.168
ip:192.168.1.168
www.test.com 192.168.1.168
mail.test.com 192.168.1.168

系统采用centos5.1,采用最小化安装,所有的选项采用系统默认。

二:安装软件前准备

1:关闭无用的服务和selinux,需要重新启动才能生效

2:配置ssh,允许root登陆

3:配置yum,快速更新

4:把所有的软件上传到/usr/src目录下

5:通过yum安装gcc, gcc-c++

6:卸载sendmail (yum y remove sendmail)

7:重新启动机器,给系统做快照,后面每完成一项工作都给系统做一个快照 

三:安装bind

安装bind

tar zxvf bind-9.4.2.tar.gz
cd bind-9.4.2
./configure --prefix=/usr/local/named && make && make install
groupadd bind
useradd -g bind -d /usr/local/named -s /sbin/nologin bind
cd /usr/local/named/etc
/usr/local/named/sbin/rndc-confgen > rndc.conf
cat rndc.conf > rndc.key
chmod 777 /usr/local/named/var
tail -10 rndc.conf | head -9 | sed s/#\ //g > named.conf

配置

1:编辑/usr/local/named/etc 目录下的named.conf 文件

vi named.conf
添加下面内容(

#################

options {
directory "/usr/local/named/var"; //域名文件存放的绝对路径
pid-file "named.pid"; //如果bind启动,自动会在/usr/local/named/var目录生成一个named.pid文件,打开文件就是named进程的ID
};

zone "." IN {
type hint; //根域名服务器
file "named.root"; //存放在//usr/local/named/var目录,文件名为named.root
};

zone "localhost" IN {
type master; //类型为主域名服务器
file "localhost.zone"; //本地正向解析的文件
allow-update { none; };
};

zone "0.0.127.in-addr.arpa" IN {
type master; //类型为主域名服务器
file "named.local"; //本地反向解析的文件
allow-update { none; };
};

zone "test.com" IN { //建立test.com域
type master;
file "test.zone"; //test.com域映射IP地址可在此文件编写
allow-update { none; };
};


zone "1.168.192.in-addr.arpa" in { //反向解析
type master;
file "test.local"; //存放反向解析的文件
allow-update { none; };
};
########################

2:在/usr/local/named/var目录下,需要创建5个文件

cd /usr/local/named/var

1:named.root
dig @a.root-servers.net . ns > named.root

2:localhost.zone
##########
$TTL 86400
$ORIGIN localhost.
@ 1D IN SOA @ root (
42 ; serial (d. adams)
3H ; refresh
15M ; retry
1W ; expiry
1D ) ; minimum

1D IN NS @
1D IN A 127.0.0.1
#############

3:named.local
###############
$TTL 86400
@ IN SOA localhost. root.localhost. (
1997022700 ; Serial
28800 ; Refresh
14400 ; Retry
3600000 ; Expire
86400 ) ; Minimum
IN NS localhost.

1 IN PTR localhost.
####################


4:test.zone
############

$TTL 86400 ; 1 day
@ IN SOA ns1.test.com. root.test.com. (
2008050122 ; serial
28800 ; refresh (8 hours)
7200 ; retry (2 hours)
604800 ; expire (1 week)
86400 ; minimum (1 day)
)
NS ns1.test.com.
A 192.168.1.168
MX 10 mail.test.com.
www A 192.168.1.168
mail A 192.168.1.168
ns1 A 192.168.1.168

#########################
5:test.local
#############
$TTL 86400
@ IN SOA ns1.test.com. root.test.com.(
20031001;
7200;
3600;
43200;
86400);
@ IN NS ns1.test.com.
168 IN PTR ns1.test.com.
##############

启动脚本

vi /etc/rc.d/init.d/named

#!/bin/bash
# named a network name service.
# chkconfig: 345 35 75
# description: a name server

if [ `id -u` -ne 0 ]
then
echo "ERROR:For bind to port 53,must run as root."
exit 1
fi
case "$1" in
start)
if [ -x /usr/local/named/sbin/named ]; then
/usr/local/named/sbin/named -c /usr/local/named/etc/named.conf -u bind && echo . && echo 'BIND9 server started'
fi
;;
stop)
kill `cat /usr/local/named/var/named.pid` && echo . && echo 'BIND9 server stopped'
;;
restart)
echo .
echo "Restart BIND9 server"
$0 stop
sleep 10
$0 start
;;
reload)
/usr/local/named/sbin/rndc reload
;;
status)
/usr/local/named/sbin/rndc status
;;
*)
echo "$0 start | stop | restart |reload |status"
;;
esac


chmod 755 /etc/rc.d/init.d/named

chkconfig --add named

service named start

 

启动测试

/usr/local/named/sbin/named -g

你可以看到启动的过程,如果你的配置文件有错误,所以你可以根据这个排错

 

启动服务测试一下
/usr/local/named/sbin/named -c /usr/local/named/etc/named.conf -u bind &

 

四:安装ncurses-5.6

这个软件如果不安装,安装mysql的时候会报错,我把解压,编译,安装一行代码来安装。

tar zxvf ncurses-5.6.tar.gz && cd ncurses-5.6 && ./configure --prefix=/usr --with-shared --without-debug && make && make install && cd ..

 

五:安装mysql

tar -zxvf mysql-5.0.51a.tar.gz && cd mysql-5.0.51a && ./configure --with-mysqld-user=mysql --prefix=/usr/local/mysql5 --with-charset=gbk --with-extra-charset=all --without-isam --exec-prefix=/usr/local/mysql5 && make && make install

groupadd mysql
useradd -g mysql mysql
/usr/src/mysql-5.0.51a/scripts/mysql_install_db
cp /usr/local/mysql5/share/mysql/my-medium.cnf /usr/local/mysql5/var/my.cnf
cp /usr/local/mysql5/share/mysql/mysql.server /etc/init.d/mysqld
chkconfig --add mysqld
chkconfig --level 2345 mysqld on
chown mysql:mysql -R /usr/local/mysql5/
service mysqld start
ln -s /usr/local/mysql5/bin/mysql /sbin/mysql
ln -s /usr/local/mysql5/bin/mysqladmin /sbin/mysqladmin

配置库文件搜索路径
echo "/usr/local/mysql5/lib/mysql" >> /etc/ld.so.conf
ldconfig -v

添加/usr/local/mysql/bin到环境变量PATH中
export PATH=$PATH:/usr/local/mysql5/bin

测试
netstat -nplt | grep mysql
ps aux|grep mysql

六:安装ZLIB2

 

如果不安装,等下编译安装openssl 就会报错,所以提前编译安装 

tar zxvf zlib-1.2.3.tar.gz && cd zlib-1.2.3 && ./configure && make && make install && cd ..

七:安装openssl

tar zxvf openssl-0.9.8g.tar.gz && cd openssl-0.9.8g && ./config shared zlib && make && make test && make install
mv /usr/bin/openssl /usr/bin/openssl.OFF
mv /usr/include/openssl /usr/include/openssl.OFF
rm /usr/lib/libssl.so
ln -s /usr/local/ssl/bin/openssl /usr/bin/openssl
ln -s /usr/local/ssl/include/openssl /usr/include/openssl
ln -sv /usr/local/ssl/lib/libssl.so.0.9.8 /usr/lib/libssl.so

配置库文件搜索路径
echo "/usr/local/ssl/lib" >> /etc/ld.so.conf
ldconfig -v

检测安装结果
openssl version

八:安装安装sasl-2.1.22

tar zxvf cyrus-sasl-2.1.22.tar.gz && cd cyrus-sasl-2.1.22 && ./configure --prefix=/usr/local/sasl2 --disable-gssapi --disable-anon --disable-sample --disable-digest --enable-plain --enable-login --enable-sql --with-mysql=/usr/local/mysql5 -with-mysql-includes=/usr/local/mysql5/include/mysql --with-mysql-libs=/usr/local/mysql5/lib/mysql --with-authdaemond=/usr/local/courier-authlib/var/spool/authdaemon/socket && cp mac/libdes/public/des.h ./ && make && make install

关闭原有的sasl,并创建链接(这个地方我和原文有不同)postfix 2.3以后的版本会分别在/usr/local/lib和/usr/local/include中搜索sasl库文件及头文件,故还须将其链接至此目录中:

mv /usr/lib/sasl2 /usr/lib/sasl2.save
mv /usr/lib/libsasl2.so.2 /usr/lib/libsasl2.so.2.save
mv /usr/lib/libsasl2.so.2.0.22 /usr/lib/libsasl2.so.2.0.22.save
ln -sv /usr/local/sasl2/lib/* /usr/lib
ln -sv /usr/local/sasl2/lib/* /usr/local/lib
ln -sv /usr/local/sasl2/include/sasl/* /usr/local/include

 

创建运行时需要的目录并调试启动
mkdir -pv /var/state/saslauthd
/usr/local/sasl2/sbin/saslauthd -a shadow pam -d

启动并测试
/usr/local/sasl2/sbin/saslauthd -a shadow pam

配置库文件搜索路径
echo "/usr/local/sasl2/lib" >> /etc/ld.so.conf
echo "/usr/local/sasl2/lib/sasl2" >> /etc/ld.so.conf
ldconfig -v

开机自动启动
echo "/usr/local/sasl2/sbin/saslauthd -a shadow pam">>/etc/rc.local 

九:安装BerkeleyDB

tar zxvf db-4.5.20.tar.gz
cd db-4.5.20/build_unix
../dist/configure --prefix=/usr/local/BerkeleyDB

make && make install
ln -sv /usr/local/BerkeleyDB/include /usr/include/db4
ln -sv /usr/local/BerkeleyDB/include/db.h /usr/include/db.h
ln -sv /usr/local/BerkeleyDB/include/db_cxx.h /usr/include/db_cxx.h
echo "/usr/local/BerkeleyDB/lib" >> /etc/ld.so.conf

ldconfig

十:安装httpd-2.2.8 

tar zxvf httpd-2.2.8.tar.gz
cd httpd-2.2.8
./configure --prefix=/usr/local/apache2 --enable-so --enable-ssl --with-ssl=/usr/local/ssl --enable-track-vars --enable-rewrite --with-zlib --enable-mods-shared=most --enable-suexec --with-suexec-caller=daemon && make && make install


编辑httpd.conf
vi /usr/local/apache2/conf/httpd.conf

DirectoryIndex index.html 改为
DirectoryIndex index.html index.htm default.htm default.html index.php index.php3 index.jsp
#ServerName www.example.com:80 改为
ServerName www.example.com:80

加上下面两行
AddType application/x-httpd-php .php .phtml
AddType application/x-httpd-php-source .phps


apache 开机启动
ln -s /usr/local/apache2/bin/apachectl /etc/init.d/httpd
vi /etc/init.d/httpd
在第三行添加以下内容
#chkconfig:345 85 15
#description: Start and stops the Apache HTTP Server.

chmod +x /etc/rc.d/init.d/httpd
chkconfig --add httpd

十一:安装GD

1:安装PNG
##########libpng###########
tar zxvf libpng-1.2.26.tar.gz && cd libpng-1.2.26 && cp scripts/makefile.linux ./makefile && ./configure --prefix=/usr/local/libpng && make && make install

2:安装freetype
##########freetype#########
tar zxvf freetype-2.3.5.tar.gz && cd freetype-2.3.5 && ./configure && make && make install

3:安装JPEG6
#########jpeg###############
tar zxvf jpegsrc.v6b.tar.gz && cd jpeg-6b && mkdir -pv /usr/local/jpeg/{,bin,lib,include,man/man1,man1} && ./configure --prefix=/usr/local/jpeg --enable-shared --enable- static && make && make install

4:安装GD
########GD###########
tar zxvf gd-2.0.35.tar.gz && cd gd-2.0.35 && ./configure --with-png --with-freetype --with-jpeg=/usr/local/jpeg/
make && make install

十二:安装php 

安装LIBXML2
#####libxml2 #####
tar zxvf libxml2-2.6.31.tar.gz && cd libxml2-2.6.31 && ./configure --prefix=/usr/local/libxml2 && make && make install && cp xml2-config /usr/bin && cd ..

安装libmcrypt-2.5.7.tar.gz
#####libmcrypt-2.5.7 #####
tar zxvf libmcrypt-2.5.7.tar.gz && cd libmcrypt-2.5.7 && ./configure && make && make install && cd ..

安装PHP5.2.5
#########php-5.2.5##########
tar zxvf php-5.2.5.tar.gz && cd php-5.2.5 && ./configure --prefix=/usr/local/php5 --with-mysql=/usr/local/mysql5 --with-apxs2=/usr/local/apache2/bin/apxs --with-jpeg-dir=/usr/local/jpeg --with-freetype-dir=/usr/local/include/freetype2 --with-zlib --with-png-dir=usr/local/libpng12 --with-libxml-dir=/usr/local/libxml2 --with-gd --enable-ftp --enable-sockets -enable-mbstring=all- --with-mcrypt --with-mysqli=/usr/local/mysql5/bin/mysql_config && make && make install && cp php.ini-dist /usr/local/php5/lib/php.ini && cd .. 

十三:安装Postfix-2.4.5

groupadd -g 2525 postfix
useradd -g postfix -u 2525 -s /sbin/nologin -M postfix
groupadd -g 2526 postdrop
useradd -g postdrop -u 2526 -s /bin/false -M postdrop

tar zxvf postfix-2.4.5.tar.gz && cd postfix-2.4.5 && make makefiles 'CCARGS=-DHAS_MYSQL -I/usr/local/mysql5/include/mysql -DUSE_SASL_AUTH -DUSE_CYRUS_SASL -I/usr/local/sasl2/include/sasl -I/usr/local/BerkeleyDB/include -DUSE_TLS -I/usr/local/ssl/include/openssl ' 'AUXLIBS=-L/usr/local/mysql5/lib/mysql -lmysqlclient -lz -lm -L/usr/local/sasl2/lib -lsasl2 -L/usr/local/BerkeleyDB/lib -L/usr/local/ssl/lib -lssl -lcrypto'&& make && make install

按照以下的提示输入相关的路径([]号中的是缺省值,”]”后的是输入值)

  install_root: [/] /
  tempdir: [/usr/local/src/ postfix-2.4.5] /tmp
  config_directory: [/etc/postfix] /etc/postfix
  daemon_directory: [/usr/libexec/postfix] /usr/local/postfix/libexec
  command_directory: [/usr/sbin] /usr/local/postfix/sbin
  queue_directory: [/var/spool/postfix]
  sendmail_path: [/usr/sbin/sendmail]
  newaliases_path: [/usr/bin/newaliases]
  mailq_path: [/usr/bin/mailq]
  mail_owner: [postfix]
  setgid_group: [postdrop]
html_directory: [no] /usr/local/apache2/htdocs/mail/postfix_html
manpages: [/usr/local/man] /usr/local/postfix/man
readme_directory: [no]

生成别名二进制文件,这个步骤如果忽略,会造成postfix效率极低:
# newaliases

生成的aliases.db默认是在/etc/目录下,须做软连接,后面的lias_maps配置会用到
ln -s /etc/aliases.db /etc/postfix/aliases.db

2.进行一些基本配置,测试启动postfix并进行发信
#vi /etc/postfix/main.cf
修改以下几项为您需要的配置
myhostname = mail.benet.org
myorigin = benet.org
mydomain = benet.org
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
mynetworks = 192.168.1.0/24, 127.0.0.0/8

说明:
myorigin参数用来指明发件人所在的域名;
mydestination参数指定postfix接收邮件时收件人的域名,即您的postfix系统要接收到哪个域名的邮件;
myhostname 参数指定运行postfix邮件系统的主机的主机名,默认情况下,其值被设定为本地机器名;
mydomain参数指定您的域名,默认情况下,postfix将myhostname的第一部分删除而作为mydomain的值;
mynetworks 参数指定你所在的网络的网络地址,postfix系统根据其值来区别用户是远程的还是本地的,如果是本地网络用户则允许其访问;
inet_interfaces 参数指定postfix系统监听的网络接口;

注意:
1、在postfix的配置文件中,参数行和注释行是不能处在同一行中的;
2、任何一个参数的值都不需要加引号,否则,引号将会被当作参数值的一部分来使用;
3、每修改参数及其值后执行 postfix reload 即可令其生效;但若修改了inet_interfaces,则需重新启动postfix;
4、如果一个参数的值有多个,可以将它们放在不同的行中,只需要在其后的每个行前多置一个空格即可;postfix会把第一个字符为空格或tab的文本行视为上一行的延续;

启动postfix
/usr/local/postfix/sbin/postfix start

添加自启动
echo "/mail/postfix2.4.7/sbin/postfix start" >> /etc/rc.local

 

测试postfix


[root@centos mail]# telnet mail.test.com 25
Trying 192.168.1.168...
Connected to mail.test.com (192.168.1.168).
Escape character is '^]'.
220 mail.test.com ESMTP Postfix
ehlo mail.test.com
250-mail.test.com
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
mail from:root@test.com
250 2.1.0 Ok
RCPT TO:root@test.com
250 2.1.5 Ok
data
354 End data with <CR><LF>.<CR><LF>
subject:Mail test!
Mail test!!!
this is first mail from telent
.
250 2.0.0 Ok: queued as 88BF255FE8
quit
221 2.0.0 Bye
Connection closed by foreign host.
You have mail in /var/spool/mail/root
[root@centos mail]#

备注:上面红色是需要你输入的,写邮件希望退出,按点,就可以了,再输入quit。查看邮件,就输入mail就可以了。 

十四:为postfix开启基于cyrus-sasl的认证功能

使用以下命令验正postfix是否支持cyrus风格的sasl认证,如果您的输出为以下结果,则是支持的:
/usr/local/postfix/sbin/postconf -a
cyrus
dovecot

#vi /etc/postfix/main.cf
添加以下内容:
############################CYRUS-SASL############################
broken_sasl_auth_clients = yes
smtpd_recipient_restrictions=permit_mynetworks,permit_sasl_authenticated,reject_invalid_hostname,reject_non_fqdn_hostname,reject_unknown_sender_domain,reject_non_fqdn_sender,reject_non_fqdn_recipient,reject_unknown_recipient_domain,reject_unauth_pipelining,reject_unauth_destination
smtpd_sasl_auth_enable = yes
smtpd_sasl_local_domain = $myhostname
smtpd_sasl_security_options = noanonymous
smtpd_sasl_application_name = smtpd
smtpd_banner = Welcome to our $myhostname ESMTP,Warning: Version not Available!

创建smtpd.conf文件

vi /usr/local/lib/sasl2/smtpd.conf
添加如下内容:
pwcheck_method: saslauthd
mech_list: PLAIN LOGIN

让postfix重新加载配置文件
/usr/local/postfix/sbin/postfix reload

[root@centos /]# telnet mail.test.com 25
Trying 192.168.1.168...
Connected to mail.test.com (192.168.1.168).
Escape character is '^]'.
220 Welcome to our mail.test.com ESMTP,Warning: Version not Available!
ehlo mail.test.com
250-mail.test.com
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-AUTH PLAIN LOGIN (请确保您的输出以类似两行)
250-AUTH=PLAIN LOGIN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN

 

十五:让postfix支持虚拟域和虚拟用户

1、编辑/etc/postfix/main.cf,添加如下内容:
########################Virtual Mailbox Settings########################
virtual_mailbox_base = /var/mailbox
virtual_mailbox_maps = mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf
virtual_mailbox_domains = mysql:/etc/postfix/mysql_virtual_domains_maps.cf
virtual_alias_domains =
virtual_alias_maps = mysql:/etc/postfix/mysql_virtual_alias_maps.cf
virtual_uid_maps = static:2525
virtual_gid_maps = static:2525
virtual_transport = virtual
maildrop_destination_recipient_limit = 1
maildrop_destination_concurrency_limit = 1
##########################QUOTA Settings########################
message_size_limit = 14336000
virtual_mailbox_limit = 20971520
virtual_create_maildirsize = yes
virtual_mailbox_extended = yes
virtual_mailbox_limit_maps = mysql:/etc/postfix/mysql_virtual_mailbox_limit_maps.cf
virtual_mailbox_limit_override = yes
virtual_maildir_limit_message = Sorry, the user's maildir has overdrawn his diskspace quota, please Tidy your mailbox and try again later.
virtual_overquota_bounce = yes

2、添加为支持虚拟域和虚拟用户所用到的配置文件

编辑/etc/postfix/mysql_virtual_alias_maps.cf ,添加如下内容:
user = extmail
password = extmail
hosts = localhost
dbname = extmail
table = alias
select_field = goto
where_field = address

编辑/etc/postfix/mysql_virtual_domains_maps.cf ,添加如下内容:
user = extmail
password = extmail
hosts = localhost
dbname = extmail
table = domain
select_field = description
where_field = domain

编辑/etc/postfix/mysql_virtual_mailbox_limit_maps.cf ,添加如下内容:
user = extmail
password = extmail
hosts = localhost
dbname = extmail
table = mailbox
select_field = quota
where_field = username

编辑/etc/postfix/mysql_virtual_mailbox_maps.cf ,添加如下内容:
user = extmail
password = extmail
hosts = localhost
dbname = extmail
table = mailbox
select_field = maildir
where_field = username
说明:
1、这里用到的数据库及用户的建立可以后文中的extmail说明部分来实现,您可以参照那一部分来理解这里指定的数据库及其用户名等;
2、以上新建文件亦可以从extman安装文件中获得,您也可以由此不用手动输入;
3、虚拟用户邮箱目录我这里沿用了/var/mailbox,你可以指定为别的目录,比如常见到的/var/spool/mail,或者/home/domains等;但如果这里做了修改,请在后文中用到时作了相应的修改;

 

十六:安装Courier authentication library

如果直接安装,会出现Cannot find either the gdbm or the db library这个错误,所以需要安装gdbm-devel,

yum -y install gdbm-devel

tar -jxvf courier-authlib-0.59.3.tar.bz2
cd courier-authlib-0.59.3
./configure \
--prefix=/usr/local/courier-authlib \
--sysconfdir=/etc \
--with-mailuser=postfix \
--with-mailgroup=postfix \
--without-authpam \
--without-authldap \
--without-authpwd \
--without-authshadow \
--without-authvchkpw \
--without-authpgsql \
--with-authmysql \
--with-mysql-libs=/usr/local/mysql5/lib \
--with-mysql-includes=/usr/local/mysql5/include \
--with-redhat \
--with-authmysqlrc=/etc/authmysqlrc \
--with-authdaemonrc=/etc/authdaemonrc \
CFLAGS="-march=i686 -O2 -fexpensive-optimizations" \
CXXFLAGS="-march=i686 -O2 -fexpensive-optimizations"

# make
# make install 

备注:。

如果出现以下错误
configure: error: --with-authmysql specified but no mysqlclient.so
须增加以下链接,重新编译
# ln -s /usr/local/mysql/bin/mysql_config /usr/bin/mysql_config
这是因为无法找到mysql,我的处理方面是输入mysql的路径,估计这个地方有点问题。

chmod 755 /usr/local/courier-authlib/var/spool/authdaemon
cp /etc/authdaemonrc.dist /etc/authdaemonrc
cp /etc/authmysqlrc.dist /etc/authmysqlrc

修改/etc/authdaemonrc 文件
authmodulelist="authmysql"
authmodulelistorig="authmysql"
daemons=10

编辑/etc/authmysqlrc 为以下内容,其中2525,2525 为postfix 用户的UID和GID。
MYSQL_SERVER localhost
MYSQL_PORT 3306 (指定你的mysql监听的端口,这里使用默认的3306)
MYSQL_USERNAME extmail (这时为后文要用的数据库的所有者的用户名)
MYSQL_PASSWORD extmail (密码)
MYSQL_SOCKET /tmp/mysql.sock
MYSQL_DATABASE extmail
MYSQL_USER_TABLE mailbox
MYSQL_CRYPT_PWFIELD password
MYSQL_UID_FIELD '2525'
MYSQL_GID_FIELD '2525'
MYSQL_LOGIN_FIELD username
MYSQL_HOME_FIELD concat('/var/mailbox/',maildir)
MYSQL_NAME_FIELD name
MYSQL_MAILDIR_FIELD concat('/var/mailbox/',maildir)

编辑/etc/authmysqlrc 为以下内容,其中2525,2525 为postfix 用户的UID和GID。

MYSQL_USER_TABLE mailbox
MYSQL_CRYPT_PWFIELD password
MYSQL_UID_FIELD '2525'
MYSQL_GID_FIELD '2525'
MYSQL_LOGIN_FIELD username
MYSQL_HOME_FIELD concat('/var/mailbox/',maildir)
MYSQL_NAME_FIELD name
MYSQL_MAILDIR_FIELD concat('/var/mailbox/',maildir)


cp /usr/src/courier-authlib-0.59.3/courier-authlib.sysvinit /etc/init.d/courier-authlib
chmod 755 /etc/init.d/courier-authlib
chkconfig --add courier-authlib
chkconfig --level 2345 courier-authlib on

echo "/usr/local/courier-authlib/lib/courier-authlib" >> /etc/ld.so.conf
ldconfig -v
service courier-authlib start (启动服务)

十七:安装Courier-IMAP

tar jxvf courier-imap-4.1.3.tar.bz2
cd courier-imap-4.1.3
./configure --prefix=/usr/local/courier-imap --with-redhat --enable-unicode --disable-root-check --with-trashquota --without-ipv6 CPPFLAGS='-I/usr/local/ssl/include/openssl -I/usr/local/courier-authlib/include' LDFLAGS='-L/usr/local/courier-authlib/lib/courier-authlib' COURIERAUTHCONFIG='/usr/local/courier-authlib/bin/courierauthconfig'
# make
# make install

cp /usr/local/courier-imap/etc/imapd.dist /usr/local/courier-imap/etc/imapd
cp /usr/local/courier-imap/etc/imapd-ssl.dist /usr/local/courier-imap/etc/imapd-ssl
cp /usr/local/courier-imap/etc/pop3d.dist /usr/local/courier-imap/etc/pop3d
cp /usr/local/courier-imap/etc/pop3d-ssl.dist /usr/local/courier-imap/etc/pop3d-ssl

配置Courier-IMAP,为用户提供pop3服务:
vi /usr/local/courier-imap/etc/pop3d
POP3DSTART=YES

注:如果你想为用户提供IMAP服务,则需在"/usr/local/courier-imap/etc/imapd"文件中设置"IMAPDSTART=yes";其它类同;

新建虚拟用户邮箱所在的目录,并将其权限赋予postfix用户:
mkdir –pv /var/mailbox
chown -R postfix /var/mailbox
cp /usr/src/courier-imap-4.1.3/courier-imap.sysvinit /etc/rc.d/init.d/courier-imapd
chmod 755 /etc/rc.d/init.d/courier-imapd
chkconfig --add courier-imapd
chkconfig --level 2345 courier-imapd on
service courier-imapd start

接下来重新配置SMTP 认证,编辑 /usr/local/lib/sasl2/smtpd.conf ,确保其为以下内容:
pwcheck_method: authdaemond
log_level: 3
mech_list:PLAIN LOGIN
authdaemond_path:/usr/local/courier-authlib/var/spool/authdaemon/socket

十八:安装Extmail-1.0.2

1、安装
tar zxvf extmail-1.0.2.tar.gz
mkdir -pv /usr/local/apache2/htdocs/extsuite
mv extmail-1.0.3 /usr/local/apache2/htdocs/extsuite/extmail
cp /usr/local/apache2/htdocs/extsuite/extmail/webmail.cf.default /usr/local/apache2/htdocs/extsuite/extmail/webmail.cf

2、修改主配置文件
#vi /var/www/extsuite/extmail/webmail.cf

部分修改选项的说明:

SYS_MESSAGE_SIZE_LIMIT = 5242880
用户可以发送的最大邮件

SYS_USER_LANG = en_US
语言选项,可改作:
SYS_USER_LANG = zh_CN

SYS_MAILDIR_BASE = /home/domains
此处即为您在前文所设置的用户邮件的存放目录,可改作:
SYS_MAILDIR_BASE = /var/mailbox

SYS_MYSQL_USER = db_user
SYS_MYSQL_PASS = db_pass
以上两句句用来设置连接数据库服务器所使用用户名、密码和邮件服务器用到的数据库,这里修改为:
SYS_MYSQL_USER = postfix
SYS_MYSQL_PASS = 123456


SYS_MYSQL_HOST = localhost
指明数据库服务器主机名,这里默认即可

SYS_MYSQL_SOCKET = /var/lib/mysql/mysql.sock
连接数据库的sock文件位置,这里修改为:
SYS_MYSQL_SOCKET = /tmp/mysql.sock


SYS_MYSQL_TABLE = mailbox
SYS_MYSQL_ATTR_USERNAME = username
SYS_MYSQL_ATTR_DOMAIN = domain
SYS_MYSQL_ATTR_PASSWD = password
以上用来指定验正用户登录里所用到的表,以及用户名、域名和用户密码分别对应的表中列的名称;这里默认即可

SYS_AUTHLIB_SOCKET = /var/spool/authdaemon/socket
此句用来指明authdaemo socket文件的位置,这里修改为:
SYS_AUTHLIB_SOCKET = /usr/local/courier-authlib/var/spool/authdaemon/socket

3、apache相关配置

vi /usr/local/apache2/conf/httpd.conf

User daemon
Group daemon
改为

User postfix
Group postfix

vi /usr/local/apache2/conf/extra/httpd-vhosts.conf
将原有的虚拟机配置示例去除,加入

<VirtualHost *:80>
ServerName mail.test.com
DocumentRoot /usr/local/apache2/htdocs/extsuite/extmail/html
ErrorLog logs/mail.test.com-error_log
CustomLog logs/mail.test.com-access_log common
ScriptAlias /extmail/cgi /usr/local/apache2/htdocs/extsuite/extmail/cgi
Alias /extmail /usr/local/apache2/htdocs/extsuite/extmail/html
</VirtualHost>

修改 cgi执行文件属主为apache运行身份用户: 

chown -R postfix.postfix /usr/local/apache2/htdocs/extsuite/extmail/cgi/ 

4、依赖关系的解决

extmail将会用到perl的DBD::Mysql和Unix::syslogd功能
tar -zxvf Unix-Syslog-1.0.tar.gz
cd Unix-Syslog-1.0
perl Makefile.PL
make
make install

如果直接安装DBD-mysql,会出现Can't locate DBI/DBD.pm in @INC的错误,所以你需要安装 perl-DBI
yum -y install perl-DBI


tar -zxvf DBD-mysql-4.006.tar.gz
cd DBD-mysql-4.006
perl Makefile.PL
(此步骤中如果出现类同Can't exec "mysql_config": No such file or directory at Makefile.PL line 76.
的错误是因为您的mysql的bin目录没有输出至$PATH环境变量)
make
make install

如果在后面访问extman的时候出现以下错误日志
error: /usr/lib/perl5/site_perl/5.8.5/i386-linux-thread-multi/auto/DBD/
mysql/mysql.so: undefined symbol: DBIc_TRACE_LEVEL
那是DBD-mysql的版本问题造成的,请装其他版本的DBD-mysql,比如DBD-mysql-3.0008 

十九:安装Extman-0.2.3 

1、安装及基本配置

Extman的管理员登陆校验码需要perl-GD模块,而perl-GD需要gd,(gd已经安装)

安装perl-GD:
tar -zxvf GD-2.35.tar.gz
cd GD-2.35
perl Makefile.PL
make
make install

安装Extman:
tar -zxvf extman-0.2.3.tar.gz
mv extman-0.2.3 /usr/local/apache2/htdo