全开源中小规模邮件服务器架设方案

一、安装apache+php+mysql+phpMyAdmin

官方网站:http://www.apache.org

http://www.php.net

http://www.mysql.com

安装mysql(假设下载的软件都在/mysrc目录):

建立用户和组

#grep  mysql  /etc/group

查询系统中是否有mysql这个用户组,没有则添加。

#groupadd  mysql

# grep  mysql  /etc/passwd

#查询系统中是否有mysql这个用户,没有则添加。

#useradd  -g  mysql -M  -s  /bin/false mysql

#cd  /mysrc

#tar zvfx  mysql-5.1.51.tar.gz

#cd  mysql-5.1.51

配置安装参数,生成Makefile文件

#./configure  --prefix=/usr/local/mysql --with-charset=gbk  --with-collation=gbk_chinese_ci \

--with-extra-charsets=gb2312,big5,utf8,binary,ascii  --enable-thread-safe-client

编译并安装

#make &&  make install

#cd  /usr/local/mysql

设置/usr/local/mysql目录属主

#chown –R  mysql .

#chgrp –R  mysql .

初始化数据库

#bin/mysql_install_db  --user=mysql

#chown  –R  root .

#chown  -R  mysql  var

mysql配置文件my.cnf

# cp  /mysrc/mysql-5.1.51/support-files/my-medium.cnf /etc/my.cnf

运行mysql数据库

#bin/mysqld_safe  --user=mysql &

mysql.server是mysql数据库运行控制脚本,拷贝到系统目录加可执行属性

#cp  /mysrc/mysql-5.1.51/support-files/mysql.server /etc/rc.d/init.d/mysqld

#chmod +x  /etc/rc.d/init.d/mysqld

初始化后的数据库访问密码为空,在此设定并记住新密码

#/usr/local/mysql/bin/mysqladmin  -u  root password  'new-password'

#/usr/local/mysql/bin/mysqladmin -u root -h localhost.localdomainpassword 'new-password'

配置开机自动运行Mysql数据库服务

#ln  -s  /etc/rc.d/init.d/mysqld  /etc/rc.d/rc3.d/S99mysqld

#ln  -s  /etc/rc.d/init.d/mysqld  /etc/rc.d/rc3.d/K99mysqld

#ln  -s  /etc/rc.d/init.d/mysqld  /etc/rc.d/rc5.d/S99mysqld

#ln  -s  /etc/rc.d/init.d/mysqld  /etc/rc.d/rc5.d/K99mysqld

因为作为了一个系统服务,数据库开启和关闭可以通过下面2条命令完成

#service mysqld  start

#service mysqld  stop

后面的Postfix,Dovecot等软件的编译需要用到Mysql库文件,设定系统可搜索路径能够找到它们,避免出现编译错误。

#vi /etc/ld.so.conf.d/mysql.conf加入下面一行内容,保存退出。

/usr/local/mysql/lib/mysql

刷新动态链接库搜索路径

#ldconfig

Mysql运行出现问题,确认文件权限的同时查看最新的日志

#tail  /usr/local/mysql/var/localhost.localdomain.err

我的Mysql配置文件/etc/my.cnf部分内容如下:

[mysqld]

user = mysql

basedir = /usr/local/mysql

datadir = /usr/local/mysql/var

pid-file = /usr/local/mysql/var/localhost.localdomain.pid

port = 3306

socket = /tmp/mysql.sock

#default-character-set = gbk

character-set-server = utf8

#DO not use skip-locking after 5.1,useskip-external-locking

#skip-locking

skip-external-locking

安装apache(假设下载的是bz2文件):

进入到源码包存放处,解包、配置、编译和安装

#cd /mysrc

#tar  -xjvf  httpd-2.2.16.tar.bz2

#cd  httpd-2.2.16

准备采用apache模块安装php,web方式的extmail系统则需要运行在suexec环境。其他参数另作它用。

#./configure --prefix=/usr/local/apache --enable-so--enable-ssl=shared --enable-proxy=shared --enable-rewrite=shared --enable-deflate  --enable-headers --with-mpm=worker--enable-suexec --with-suexec-bin=/usr/local/apache/bin/suexec--with-suexec-caller=nobody --with-suexec-docroot=/var/www --with-suexec-logfile=/var/log/apache/suexec.log

#make && make install

安装php(支持GD库,php页面图形验证码会用到)

下载libiconv,freetype, libpng, jpegsrc, gd

http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.13.1.tar.gz

http://www.freetype.org/下载freetype-2.4.3.tar.gz

http://www.libpng.org/pub/png/libpng.html下载libpng-1.4.4.tar.gz

http://www.ijg.org/下载jpegsrc.v8b.tar.gz

http://www.zlib.net/下载zlib-1.2.5.tar.gz

http://www.libgd.org/Downloads下载gd-2.0.35.tar.gz

http://www.gnu.org/software/libtool/下载libtool

ftp://mcrypt.hellug.gr/pub/crypto/mcrypt/libmcrypt/下载libmcrypt

安装下载的文件

GNU的libiconv主要是解决多语言编码处理转换等应用问题。

#tar  zvfx  libiconv-1.13.1.tar.gz

进入到源程序根目录

#cd  libiconv-1.13.1

安装到/usr/local目录,&&连接多个命令顺序执行,中途出现错误请单个执行并检查。

为了管理的方便,我们可以将这些软件安装到指定的位置如/usr/local/libiconv,这就是源码编译的一个小问题,不同的用户有不同的软件安装习惯,随着软件的增多,文件越来越多,软件之间的相互依赖随之增多,管理难度不断加大,不少用户基于这个原因选择了系统的安装管理套件来使用和管理软件,如APT(AdvancedPackaging Tool)和RPM(RedHat Package Manager)。

#./configure --prefix=/usr/local &&  make  && make install

进入上一级目录,也就是/mysrc

# cd  ..

#tar  zvfx  freetype-2.4.3.tar.gz

#cd  freetype-2.4.3

#./configure --prefix=/usr/local &&  make  &&  make install

省略文件解包和目录切换,下文同。

#./configure --prefix=/usr/local &&  make  && make install

安装jpegsrc.v8b

默认安装即可支持静态和共享库--enable-static --enable-shared。

#./configure  --prefix=/usr/local  && make  &&  make install

安装zlib-1.2.5

#./configure  --prefix=/usr/local  && make  &&  make install

安装gd-2.0.35

# ./configure --prefix=/usr/local --with-jpeg=/usr/local --with-png=/usr/local--with-zlib=/usr/local/ --with-freetype=/usr/local

#make && make install

安装libtool-2.4

# ./configure  --prefix=/usr/local  && make  &&  make install

安装libmcrypt5.2.7

#./configure  --prefix=/usr/local  && make  &&  make install

安装php5.2.14

# ./configure --prefix=/usr/local/php--with-apxs2=/usr/local/apache/bin/apxs --with-mysql=/usr/local/mysql--with-jpeg-dir=/usr/local --with-freetype-dir=/usr/local--with-png-dir=/usr/local --with-gd=/usr/local --with-zlib-dir=/usr/local--with-mcrypt=/usr/local --enable-mbstring --enable-sockets

#make && make test && make install

PHP配置文件php.ini,可以进行适当的编辑以满足网站需要。

#cp  /mysrc/php-5.2.14/php.ini-recommended  /usr/local/php/lib/php.ini

编辑apache配置文件httpd.conf使支持PHP

#vi httpd.conf

确保有如下几行内容

LoadModule php5_module       modules/libphp5.so

AddType  application/x-httpd-php .php .php3

AddType  application/x-httpd-php-source .phps

DirectoryIndex  index.html  index.htm  index.php

至此,LAMP环境以搭建完毕,让我们检验一下吧,在网站的根目录/usr/local/apache/htdocs下建立一个test.php文件,内容如下:

<?php

echophpinfo();

?>

开启web服务器

# /usr/local/apache/bin/apachectl  start

访问这个页面,假设服务器的IP是192.168.1.100,那么在浏览器里输入http://192.168.1.100/test.php,成功运行将会出现PHP的logo图标和配置信息。为了保密和安全的需要,现在有些php脚本程序进行了Zend加密,不能直接读取源码,需要安装Zend Optimizer才能正常运行,下载地址是http://www.zend.com,这里不再赘述。

   phpMyAdmin是Mysql数据库管理的得力助手,强烈建议大家采用,它是一个类似于SQL Server的可视化图形管理工具,使开发应用人员摆脱了只能通过命令行进行Mysql数据库操作的尴尬局面。官方网址http://www.phpmyadmin.net,当前版本3.3.7

#tar zvfx phpMyAdmin-3.3.7-all-languages.tar.gz

#mv  phpMyAdmin-3.3.7-all-languages /usr/local/apache/htdocs/phpmyadmin

#cd  /usr/local/apache/htdocs/phpmyadmin

# cp  config.sample.inc.php  config.inc.php

编辑config.inc.php,修改2行,其它不变。

#vi config.inc.php

$cfg['blowfish_secret'] = 'cookie-auth'

$cfg['Servers'][$i]['auth_type'] = 'http'

我们这里采用了http认证方式,访问时输入访问数据库的用户名和密码,也可以选用cookie方式。访问下试试http://192.168.1.100/phpmyadmin/,输入root和密码就可以进入数据库控制界面了,前提是WEB(Apache)服务和Mysql数据库服务已经开启。

二、安装postfix

因为系统中已存在Sendmail这样一个MTA程序,我们需要用Postfix替换它,如果是已经投入使用的程序,可以让其完成邮件的投递任务后再做替换。实际上现有操作系统使用MTA切换器来选择不同的邮件传输代理(Sendmail,Postfix等),如FreeBSD mailwrapper 或者 the Linux mail switch,那样的话只需要选项切换到Postfix就可以了,我们通过如下方式手动修改:

关闭sendmail服务

# /etc/rc.d/init.d/sendmail stop

设置其不在系统启动时启动

# chkconfig -levels 12345 sendmail off

#mv  /usr/sbin/sendmail /usr/sbin/sendmail.OFF

#mv  /usr/bin/newaliases /usr/bin/newaliases.OFF

#mv  /usr/bin/mailq /usr/bin/mailq.OFF

#chmod  755  /usr/sbin/sendmail.OFF  /usr/bin/newaliases.OFF  /usr/bin/mailq.OFF

开始安装:

创建postfix用户和组,并建立一个无任何用户的组postdop,用户postfix不需要自己的主目录也不需要登录,所以设定参数-d/dev/null  -s/bin/false。

#groupadd  -g  12345  postfix

#useradd  -u  12345  -g  12345 -c  postfix  -d/dev/null  -s/bin/false  postfix

#groupadd  -g  54321  postdrop

发信认证模块,Postfix在2.3版本以前只支持Cyrus SASL,现在多了一个选择,那就是Dovecot SASL。安装postfix会用到Cyrus SASL的文件,先安装Cyrus SASL。

#http://www.cyrusimap.org下载Cyrus SASL

#tar  zvfx  cyrus-sasl-2.1.23.tar.gz

#cd  cyrus-sasl-2.1.23

# tar  zvfx  postfix-2.7.1.tar.gz

# cd postfix-2.7.1

生成Makefile文件,编译Postfix支持SMTP AUTH和TLS,CentOS5.5已包含了Openssl,头文件(例如ssl.h)在/usr/include/openssl中,如果自我编译Openssl请注意文件路径。

# make makefiles CCARGS='-DHAS_MYSQL-I/usr/local/mysql/include/mysql  \

-DUSE_SASL_AUTH-DDEF_SERVER_SASL_TYPE=\"dovecot\"   \

-DUSE_TLS -I/usr/include/openssl'  \

AUXLIBS='-L/usr/local/mysql/lib/mysql -lmysqlclient-lz -lm   \

-L/usr/lib -lssl -lcrypto'

#

#make install

编译完后会进入交互式的问答,选择默认值即可,没有默认值请参照如下设置:

install_root: [/]

config_directory: [/etc/postfix]

tempdir: [/tmp]

command_directory: [/usr/sbin]

daemon_directory: [/usr/libexec/postfix]

data_directory: [/var/lib/postfix]

html_directory: [no]

mail_owner: [postfix]

mailq_path: [/usr/bin/mailq]

manpage_directory: [/usr/local/man]

newaliases_path: [/usr/bin/newaliases]

queue_directory: [/var/spool/postfix]

readme_directory: [no]

sendmail_path: [/usr/sbin/sendmail]

setgid_group: [postdrop]

安装完毕。

检查postfix支持的SASL验证类型,参数-a查询服务器端类型,用来验证登录用户,-A查询客户端类型,Postfix用来和别的服务器通讯。Dovecot现在只支持服务端验证,Cyrus SASL两者都支持,若要使用,先要安装好Cyrus SASL并修改Postfix编译参数如下:

# make makefiles CCARGS='-DHAS_MYSQL-I/usr/local/mysql/include/mysql  \

-DUSE_CYRUS_SASL -DUSE_SASL_AUTH -I/usr/local/include/sasl \

-DUSE_TLS -I/usr/include/openssl'  \

AUXLIBS='-L/usr/local/mysql/lib/mysql -lmysqlclient-lz -lm -L/usr/local/lib -lsasl2  \

-L/usr/lib -lssl -lcrypto'

#查看Postfix可用的SASL类型

#postconf  -a

查看postfix default设置

#postconf  -d

查看用户自定义设置

#postconf  –n

修改用户自定义设置

#postconf  -e

创建用户和邮箱目录,假定虚拟用户邮件全部在/var/vmail中。

#mkdir  /var/vmail

#groupadd  -g  1001  vmail

#useradd  -u  1001  -g 1001  -d/var/vmail  -s/bin/false  vmail

#chown  vmail:vmail /var/vmail

#chmod  700  /var/vmail 

附相关配置文件,请根据实际情况修改。邮箱采用Maildir格式,用户的邮箱目录格式是/var/vmail/domain/username/Maildir。

#vi /etc/postfix/main.cf

#=====================BASE=========================

myhostname = mail.test.com

mydomain = test.com

myorigin = $mydomain

mydestination =

mynetworks = 192.168.1.0/24,127.0.0.0/8

inet_interfaces = all

alias_database = hash:/etc/aliases

alias_maps = hash:/etc/aliases

home_mailbox = Maildir/

##recommend options

smtpd_banner = $myhostname ESMTP

biff = no

append_dot_mydomain = no

strict_rfc821_envelopes = yes

disable_vrfy_command = yes

##

#=====================Vritual Mailboxsettings=========================

virtual_mailbox_base = /var/vmail

virtual_mailbox_maps =mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf

virtual_mailbox_domains =mysql:/etc/postfix/mysql_virtual_domains_maps.cf

virtual_alias_maps =mysql:/etc/postfix/mysql_virtual_alias_maps.cf

# 运行LDA的用户必须拥有邮箱目录/var/vmail的权限

#这里的uid则该是vmail的uid,虚拟用户均用此id权限进入邮箱。

virtual_minimum_uid = 1001

virtual_uid_maps = static:1001

virtual_gid_maps = static:1001

#本文使用maildrop投递邮件,不使用Postfix的LDA也不使用Dovecot的LDA,

#大家可以参考官方文档调整配置。

#virtual_transport = virtual

virtual_transport = maildrop

maildrop_destination_recipient_limit = 1

maildrop_destination_concurrency_limit = 1

#====================QUOTA========================

#每封信的最大大小(字节),Postfix默认值10M

message_size_limit = 10240000

#邮箱的大小,设定为20M

virtual_mailbox_limit = 20971520

virtual_create_maildirsize = yes

virtual_mailbox_extended = yes

virtual_mailbox_limit_maps =mysql:/etc/postfix/mysql_virtual_limit_maps.cf

virtual_mailbox_limit_override = yes

virtual_maildir_limit_message = Sorry, the user'smaildir has overdrawn his diskspace quota, please try again later.

virtual_overquota_bounce = yes

#====================SASL========================

smtpd_sasl_auth_enable = yes

smtpd_sasl_local_domain = $mydomain

smtpd_sasl_security_options = noanonymous

#cyrus or dovecot for SASL

smtpd_sasl_type = dovecot

#这里要和dovecot配置文件中的配置相对应,设置相对路径有助于在chroot环境下使用。

#实际上是/var/spool/postfix/private/auth

smtpd_sasl_path = private/auth

#使用Cyrus SASL认证,这里注释掉,我们这里用Dovecot SASL。

#smtpd_sasl_type = cyrus

# Postfix 2.3 and later for cyrus

#smtpd_sasl_path = smtpd

# Postfix < 2.3

#smtpd_sasl_application_name = smtpd

 

#有一些Microsoft 的SMTP客户端,比如Outlook Express 4.X和MicroSoft Exchange 5.0

#采用的是非标准的SMTP认证协议,将该选项设置为yes可以解决这类不兼容问题。

broken_sasl_auth_clients = yes

#设置认证链,允许本地用户、认证成功用户通过SMTP发送邮件,拒绝不符合条件

#的用户发信。

#下列参数请放于一行

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,permit

 

#如果系统支持TLS请创建好相关证书,否则请注释掉接下来的配置内容。

#参考文档http://www.postfix.org/TLS_README.html。

#### TLS bits ####

smtpd_tls_auth_only = no

smtp_use_tls = yes

smtpd_use_tls = yes

smtp_tls_note_starttls_offer = yes

 

## Location of key, cert and CA-cert.

## These files need to be generated using openssl

 

smtp_tls_CAfile = /etc/postfix/tls/cacert.pem'

smtp_tls_cert_file = /etc/postfix/tls/mycert.pem'

smtp_tls_key_file = /etc/postfix/tls/mykey.pem'

smtpd_tls_cert_file = /etc/postfix/tls/mycert.pem

smtpd_tls_key_file = /etc/postfix/tls/mykey.pem

smtpd_tls_CAfile = /etc/postfix/tls/cacert.pem

 

#To increase TLS activity logging set thesmtpd_tls_loglevel option to a value from 1 to 4.

smtpd_tls_loglevel = 1

smtpd_tls_received_header = yes

smtpd_starttls_timeout=60s

smtpd_tls_session_cache_timeout = 3600s

tls_random_exchange_name = /var/run/prng_exch

tls_random_source = dev:/dev/urandom

tls_smtp_use_tls = yes

ipv6_version = 1.25

三、安装Maildrop

http://www.courier-mta.org/download.php#maildrop  下载 maildrop-2.5.1.tar.bz2

http://wiki.dovecot.org/maildrop/ 下载maildrop-2.3.0-dovecotauth.patch.txt

Maildrop最新版本是2.5.1,现有的认证补丁2.3.0没有明确支持,尝试一下,有问题可以查看补丁文件手动修改原文件,然后编译安装。

#tar jvfx  maildrop-2.5.1.tar.bz2

这里补丁文件与maildrop-2.5.1.tar.bz2在同一目录/mysrc下

#cd  maildrop-2.5.1

#patch  –p0  <  ../maildrop-2.3.0-dovecotauth.patch.txt

找不着文件分别输入maildrop/main.C、maildrop/Makefile.am、maildrop/Makefile.in,没有错误则完成打补丁工作。

#配置maildrop,准备编译安装

#./configure --enable-sendmail=/usr/sbin/sendmail \

--enable-trusted-users='root vmail' \

--enable-syslog=1 \

--enable-maildirquota \

--enable-maildrop-uid=vmail \

--enable-maildrop-uid=vmail \

--with-trashquota \

--with-dirsync

#修正补丁文件(dovecotauth.h和dovecotauth.c)位置

# cp  maildrop-2.3.0/maildrop/dovecotauth.* ./maildrop/

#make && make install

修改对应Postfix配置文件master.cf,找到maildrop行并修改为:

maildrop unix  -       n      n       -       -      pipe

flags=DRhu user=vmail argv=/usr/local/bin/maildrop -t/var/run/dovecot/auth-master -d ${recipient}

 

设定Maildrop的日志和配置文件/etc/maildroprc

#touch  /var/log/maildrop.log

Maildrop很容易出现无法读写日志文件,无法创建邮箱的错误,主要是文件权限的问题。

#chown vmail:vmail  /var/log/maildrop.log

#vi  /etc/maildroprc

SHELL="/bin/bash"

SENDMAIL="/usr/sbin/sendmail -oi -t"

logfile "/var/log/maildrop.log"

DEFAULT="$HOME/Maildir/"

#dovecot-sql.conf针对虚拟用户根目录的查询及设定

#user_query = SELECT concat('/var/vmail/', homedir)as home, concat('maildir:/var/vmail/', maildir) as mail,  1001 AS uid, 1001 AS gid,concat('maildir:storage=', quota) AS quota FROM mailbox

#DEFAULT="./Maildir/"

# 有的dovecot-sql.conf如下设定用户根目录

#user_query = SELECT concat('/var/vmail/', maildir)as home, concat('maildir:/var/vmail/', maildir) as mail,  1001 AS uid, 1001 AS gid,concat('maildir:storage=', quota) AS quota FROM mailbox

#DEFAULT="./"

四、安装Dovecot

http://www.dovecot.org/下载dovecot-2.0.5.tar.gz.。

创建Dovecot2.0相关用户:

#groupadd  dovenull

#useradd  -g  dovenull  -d/dev/null  -s/bin/false  dovenull

#groupadd  dovecot

#useradd  -g  dovecot  -d/dev/null  -s/bin/false  dovecot

#tar zvfx dovecot-2.0.5.tar.gz

#cd dovecot-2.0.5

配置参数使Dovecot支持Mysql数据库生成Makefile文件。

# CPPFLAGS='-I/usr/local/mysql/include-I/usr/include/openssl'  \

LDFLAGS='-L/usr/local/mysql/lib' ./configure --prefix=/usr/local/dovecot  \

--sysconfdir=/etc --localstatedir=/var --with-sql --with-mysql --with-ssl=openssl

编译安装:

#make && make install

默认配置文件在/etc/dovecot目录:

#vi  /etc/dovecot/dovecot.conf

auth_debug = yes

auth_default_realm = test.com

auth_mechanisms = plain login CRAM-MD5 DIGEST-MD5

default_login_user = dovenull

default_internal_user = dovecot

disable_plaintext_auth = no

#虚拟账号使用统一的系统账号vmail进入邮箱,用户名或ID号均可。

mail_uid = vmail

mail_gid = vmail

#限定可使用的uid范围,这里只用vmail的uid。

first_valid_uid = 1001

last_valid_uid = 1001

listen = *

log_path = /var/log/dovecot.log

#邮箱格式,在dovecot中%d代表域名(domain),

#%n代表用户名称(user),%u代表user@domain。

mail_location = maildir:/var/vmail/%d/%n/Maildir

passdb {

  driver = sql

args = /etc/dovecot/dovecot-sql.conf

  }

userdb {

  driver = sql

args = /etc/dovecot/dovecot-sql.conf

 }

 

#认证相关,这里Maildrop和Postfix都使用dovecot的认证。

service auth {

 unix_listener auth-master {

    group =vmail

user = vmail

mode = 0600

  }

 unix_listener /var/spool/postfix/private/auth {

group = postfix

user = postfix

    mode = 0600

  }

}

 

#全局邮箱容量配额, http://wiki2.dovecot.org/Quota。可以用数据库的查询结果覆盖默认值。

plugin {

  quota =maildir:User quota

  quota_rule =*:storage=20M

  # 10% of 20M= 2MB

  quota_rule2= Trash:storage=+10%%

  # 20% of 20M= 4MB

  quota_rule3= Spam:storage=+20%%

  }

mail_plugins = $mail_plugins quota

protocol pop3 {

  mail_plugins= $mail_plugins

 pop3_client_workarounds = outlook-no-nuls oe-ns-eoh

}

 

protocol imap {

 imap_client_workarounds = delay-newmail

  mail_plugins= $mail_plugins imap_quota

}

 

#支持TLS的设置

ssl_ca = </etc/postfix/tls/cacert.pem

ssl_cert = </etc/postfix/tls/mycert.pem

ssl_key = </etc/postfix/tls/mykey.pem

 

编辑/etc/dovecot/dovecot-sql.conf配置文件

#vi  /etc/dovecot/dovecot-sql.conf

driver = mysql

#Mysql数据库连接参数,因为使用extmail,所以要对应起来。

#数据库的建立请参照后续extmail相关内容。

connect = host=localhost dbname=extmail user=extmailpassword=extmail

#user_query = SELECT concat('/var/vmail/', homedir)as home, concat('maildir:/var/vmail/', maildir) as mail, 1001 AS uid, 1001 ASgid, concat('maildir:storage=', quota) AS quota FROM mailbox WHERE username ='%u' AND active = '1'

# 查询速度快

user_query = SELECT '/var/vmail/%d/%n' as home,'maildir:/var/vmail/%d/%n/Maildir' as mail, 1001 AS uid, 1001 AS gid,concat('maildir:storage=', quota) AS quota FROM mailbox WHERE username = '%u'AND active = '1'

#password_query = SELECT username as user, password,concat('/var/vmail/', homedir) as userdb_home, concat('maildir:/var/vmail/',maildir) as userdb_mail, 1001 as userdb_uid, 1001 as userdb_gid FROM mailboxWHERE username = '%u' AND active = '1'

# fast but now so nice:-)

password_query = SELECT username as user, password,'/var/vmail/%d/%n' as userdb_home, 'maildir:/var/vmail/%d/%n/Maildir' asuserdb_mail, 1001 as userdb_uid, 1001 as userdb_gid FROM mailbox WHERE username= '%u' AND active = '1'

五、Webmail(Extmail+Extman)的架设

http://www.extmail.org/download/ 下载extmail-1.2.tar.gz和extman-1.1.tar.gz。

运行此Webmail需要相关Perl模块的支持,CentOS5.5需要下载的部分模块源文件:Unix::Syslog,DBI,DBD::mysql,perl-GD(创建图形验证码),extman图形日志需要rrdtool, Time::HiRes, File::Tail。

查看模块是否安装,报错则需要下载安装,模块查询及下载地址http://search.cpan.org/search?query=$i&mode=module

# perl -e 'use DBI'

安装perl模块:

#tar zvfx  Unix-Syslog-1.1.tar.gz

#cd  Unix-Syslog-1.1

# perl  Makefile.PL

#make &&  make test  && make install

#安装DBD-mysql

#tar zvfx  DBD-mysql-4.017.tar.gz

#cd  DBD-mysql-4.017

# perl Makefile.PL  --mysql_config=/usr/local/mysql/bin/mysql_config  \

--with-mysql=/usr/local/mysql

其他模块安装步骤类似,省略。

#Extmail及Extman解包到“/var/www/extsuite/”目录。

#mkdir –p /var/www/extsuite/

#tar zvfx   extmail-1.2.tar.gz

#cp  –a  extmail-1.2 /var/www/extsuite/extmail

#tar zvfx  extman-1.1.tar.gz

# cp  -a  extman-1.1 /var/www/extsuite/extman

#修改目录属主为vmail用户及同名组。

# chown -R  vmail:vmail  /var/www/extsuite/extmail

# chown -R  vmail:vmail  /var/www/extsuite/extman

#apache日志目录的创建

#mkdir /var/log/apache

修改apache配置文件,和apache编译时的配置对应起来,apache以可以调用Suexec的nobody身份运行:

#vi /usr/local/apache/conf/httpd.conf

User nobody

Group nobody

<Directory"/var/www/extsuite/extmail">

    OptionsNone

   AllowOverride None

    Orderallow,deny

    Allow fromall

</Directory>

<Directory"/var/www/extsuite/extman">

    OptionsNone

   AllowOverride None

    Orderallow,deny

    Allow fromall

</Directory>

<VirtualHost 192.168.1.100:80>

ServerName mail.test.com

ServerAdmin  admin@test.com

DocumentRoot /var/www/extsuite/extmail/html/

ScriptAlias /extmail/cgi/var/www/extsuite/extmail/cgi

ScriptAlias /extmail/cgi-bin/var/www/extsuite/extmail/cgi-bin

Alias /extmail /var/www/extsuite/extmail/html

ScriptAlias /extman/cgi /var/www/extsuite/extman/cgi

Alias /extman /var/www/extsuite/extman/html

SuexecUserGroup vmail vmail

ErrorLog /var/log/apache/mail_error_log

TransferLog /var/log/apache/mail_access_log

</Virtualhost>

重启apache服务器:

# /usr/local/apache/bin/apachectl  restart

利用extman提供的sql脚本初始化邮件数据库,执行时要求输入数据库root账号密码。

#cd  /var/www/extsuite/extman/docs/

#/usr/local/mysql/bin/mysql  -u  root -p  < extmail.sql

#/usr/local/mysql/bin/mysql  -u root  -p  < init.sql

密码默认采用了md5crypt,我们这里使用plain-md5,请根据需要修改。

通过phpMyAdmin进入数据库修改管理和用户的passwod字段值为md5编码。

sql命令为UPDATE manager SET password = MD5( ' extmail*123*' ) WHERE username =root@extmail.org。

设置extmail.cf:

#cp  /var/www/extsuite/extmail/webmail.cf.default  /var/www/extsuite/extmail/webmail.cf

#vi  /var/www/extsuite/extmail/webmail.cf

#使用mysql数据库

SYS_AUTH_TYPE = mysql

#用户邮件的存放目录

SYS_MAILDIR_BASE = /var/vmail

#对应vmail用户的uid,gid

SYS_DEFAULT_UID = 1001

SYS_DEFAULT_GID = 1001

#extmail支持crypt|cleartext|plain|md5|md5crypt|plain-md5|ldap-md5|sha|sha1

SYS_CRYPT_TYPE = plain-md5

#邮件配额20M,可以通过extman给用户单独设置。

SYS_MESSAGE_SIZE_LIMIT = 20971520

#Mysql数据库连接设置,采用webmail.sql默认值,请修改。

SYS_MYSQL_USER = extmail

SYS_MYSQL_PASS = extmail

SYS_MYSQL_DB = extmail

SYS_MYSQL_HOST = localhost

#SYS_MYSQL_SOCKET = /var/lib/mysql/mysql.sock,对照/etc/my.cnf文件。

SYS_MYSQL_SOCKET = /tmp/mysql.sock

设置extman:

因为邮件网站以vmail用户运行,设置默认配置目录/tmp/extman属主为vmail。

#mkdir  /tmp/extman/

#chown –R vmail:vmail  /tmp/extman/

extman部分参数设置:

#cp  /var/www/extsuite/extman/webman.cf.default  /var/www/extsuite/extman/webmail.cf

#vi  /var/www/extsuite/extman/webman.cf

SYS_MAILDIR_BASE = /var/vmail

#开启图形验证,0为关闭。

SYS_CAPTCHA_ON = 1

#设置用户ID和组ID,这里用vmail的uid,gid。

SYS_DEFAULT_UID = 1001

SYS_DEFAULT_GID = 1001

#加密方式默认值为md5crypt,修改时请同时修改password字段值。

SYS_CRYPT_TYPE = plain-md5

#Mysql数据库连接设置

SYS_MYSQL_USER = webman

SYS_MYSQL_PASS = webman

SYS_MYSQL_DB = extmail

SYS_MYSQL_HOST = localhost

SYS_MYSQL_SOCKET = /tmp/mysql.sock

以上是部分参数设置,其他参数请按需修改。

Extman拥有图形日志功能,我们可以通过图片很直观的了解邮件投递信息。

Mailgraph官方网站http://mailgraph.schweikert.ch/提供更多信息。

# mkdir  /usr/local/mailgraph_ext

# cd  /var/www/extsuite/extman/

# cp  addon/mailgraph_ext/* /usr/local/mailgraph_ext/*

邮件队列不在默认的/var/spool/postfix,请务必修改qmonitor.pl文件。

手动启动图形日志程序,可以将命令加入/etc/rc.local中,开机自动运行。

# /usr/local/mailgraph_ext/mailgraph-init start

Extman提供了Postfix部分配置文件:

#cd  /var/www/extsuite/extman/docs

# cp  mysql_virtual_* /etc/postfix/

编辑配置文件mysql_virtual_mailbox_maps.cf,mysql_virtual_domains_maps.cf,mysql_virtual_alias_maps.cf,mysql_virtual_limit_maps.cf:

举例如下,请根据连接数据库的实际参数修改配置:

#vi  /etc/postfix/mysql_virtual_mailbox_maps.cf

user = extmail

password = extmail

hosts = localhost

dbname = extmail

table = mailbox

select_field = maildir

where_field = username

additional_conditions = AND active = '1'

最后,不要忘记在DNS服务器上有MX记录,并可通过mail.test.com访问192.168.1.100:

$ORIGIN test.com.

MX  10  mail.test.com.

mail  A  192.168.1.100

至此,邮件系统的构建基本完成,启动邮件系统的相关命令如下:

启动、关闭、重载SMTP(Postfix):

#postfix start|stop|reload

启动POP3/IMAP(Dovecot)

#dovecot

关闭和重载Dovecot:

#dovecot stop|reload

本机测试(在其他机器测试请换成服务器地址192.168.1.100):

#telnet 127.0.0.1 25

#telnet 127.0.0.1 110

登陆webman设置域、邮箱、别名等:

http://192.168.1.100/extman/cgi/index.cgi

登陆webmail:

http://192.168.1.100/extmail/cgi/index.cgi

以上内容就是我们使用开源软件构件邮件服务器的一般步骤,这种邮件系统基本满足中小规模单位的内部应用,因为采取了模块化的方法,例如发信服务软件、收信软件、认证模块等既相互联系又相对独立,可以对这些体软件进行更新或替换,选择适合自己网站应用的Email软件。若要提供更好的服务,后期还需要加上防病毒、防垃圾邮件的功能,网络上有很多软件和相关介绍,我们可以参考选择。

参考网站:

http://www.postfix.org

http://wiki2.dovecot.org

http://www.mysql.com

http://www.courier-mta.org/

http://www.extmail.org/

 

 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值