今天我们来学习一种基于可用虚拟账号的邮件服务器Extmail.

Extmail 是一个以perl语言编写,面向大容量/ISP级应用,免费的高性能Webmail软件,主要包括ExtMailExtman两个部分的程序套件。ExtMail套件用于提供从浏览器中登录、使用邮件系统Web操作界面,而Extman套件用于提供从浏览器中管理邮件系统的Web操作界面。它以GPL版权释出,设计初衷是希望设计一个适应当前高速发展的IT应用环境,满足用户多变的需求,能快速进行开发、改进和升级,适应能力强的webmail系统。

518a149eda1fd.png

由该图我们可以看出,extmail所依赖的软件和服务有点多,所以安装配置有些麻烦,所以这也是有些人不愿意使用的原因,不过我们今天就和大家一起安装配置以下。

首先我们源码安装mysql apache devecot 注意:源码安装的必备环境

 

518a149fdd0b4.png

这些包我们就用rpm安装啦

yum install  tcl  tcl-devel  libart_lgpl  libart_lgpl-devel libtool-ltdl  libtool-ltdl-devel  expect bind bind-chroot caching-nameserver perl-DBD-mysql

源码安装mysqlapache我们之前有很详细的介绍,这里我们就不麻烦啦。然后等mysqlapache配置完以后我们进行配置dns

当然dns我们使用yum安装,之前我们也有介绍,所以我们直接修改了,就不多啰嗦了  ,修改的结果为:

518a14a28a02b.png

 

518a14ae8c0fc.png

然后创建a.com域 进行配置

518a14aeecfaf.png

518a14af9ddee.png

518a14b032714.png

518a14b24dc33.png

然后尝试 启动dns

 

我们让dns进行解析的时候就需要进行dns指向

 

518a14b33a78c.png

修改一下主机名

518a14b3be0cf.png

然后我们测试一下dns

 

518a14b5099f6.png

成功

然后测试一下本地邮局

518a14bab3b75.png

可以运行

然后我们安装postfix

再安装之前我们必须把sendmail的所有东西卸载,或者关闭

然后我们用最新版本的postfix

 

首先创建用户组和用户

groupadd  -g  1200  postdrop

groupadd  -g  1000  postfix

useradd -u 1200 -g postfix -s /sbin/nologin -M postfix

 useradd -u 1000 -g postdrop  -s /sbin/nologin -M postdrop

在我们查看过安装文档之后会发现 make makefiles  即为./configure  这时候会需要一系列的配置

make makefiles 'CCARGS=-DHAS_MYSQL -I/usr/local/mysql/include -DUSE_SASL_AUTH -DUSE_CYRUS_SASL -I/usr/include/sasl  -DUSE_TLS ' 'AUXLIBS=-L/usr/local/mysql/lib -lmysqlclient -lz -lm -L/usr/lib/sasl2 -lsasl2   -lssl -lcrypto'

 

在进行make install的时候会提醒我们进行选择一些路径而我们一般不用修改不过可以把postfix的临时目录修改为/tmp,其余的我们就按照默认的吧。

编译完成后,我们执行以下这条命令  /usr/bin/newaliases

这时会生成一个文件以便于和postfix结合

 

518a14bb4bf36.png

这样以后就可以启动了,不过我们为了方便都会有控制文件的,我们用的是源码安装的,所以再我们解压的包里面有这样postfix-script的脚本,不过这样很麻烦,所以我们直接用官方提供的配置文件,下面我们提取官方的控制文件

[root@mail abc]# rpm2cpio postfix-2.3.3-2.1.el5_2.i386.rpm  |cpio –id

执行完成后会生成如下的文件,我们可以看到postfix,它就是控制文件,我们直接将其拷贝到/etc/init.d目录下即可

518a14bbddb40.png

请大家谨记在拷贝的时候一定要连同权限拷贝走,要不然会出现麻烦的哦

518a14bca549c.png

启动成功了

然后我们修改下在安装过程中产生的配置文件

518a1516ba388.png

518a152025abd.png

518a152638a6a.png

 

这时候我们可以发送一下本地的邮件来测试一下安装是否成功,我测试了下,是没问题的,你也试一下吧,如果有错的话,依照前面的步骤修改吧。记住要细心哦。

由于上面我们没有设置身份验证,现在我们进行配置一下

我们可以将/usr/lib/sasl2目录下sendmailsasl2结合的配置文件拷贝过来然后简单的修改一下即可

518a152703e69.png

518a152918a09.png

修改一个主文件main.cf其他的身份验证的语句

518a152ddaaa0.png

 

然后将saslauthd启动,并设置开机启动。然后我们测试一下是否能验证成功,由图可以看到一应有验证的语句了,证明saslpostfix结合成功,能进行验证了。

 

518a152f02d69.png

这个验证完成了,接下来我们要理解用虚拟账号的话,就需要与数据库的连接,postfixmysql数据库的连接需要一个小工具courier-authlib,所以我们现在开始安装这个小工具

这里呢我们已经下载好啦源码的安装包所以和以前一样,直接进行

./configure  \

--prefix=/usr/local/courier-authlib \    安装路径

 --sysconfdir=/etc \

  --with-authmysql  \            结合数据库 进行身份验证

  --with-mysql-libs=/usr/local/mysql/lib \  连接mysql的库文件

  --with-mysql-includes=/usr/local/mysql/include \    。。。头文件

   --with-redhat \   红帽

   --with-authmysqlrc=/etc/authmysqlrc \       说明连接数据库的一系列配置

   --with-authdaemonrc=/etc/authdaemonrc \    连接mysql时候调用的哪些模块

   --with-ltdl-lib=/usr/lib \             下面的两个是额外需要的文件

   --with-ltdl-include=/usr/include

 make   make install

配置两个生成的文件   

Authmysqlrc   一个用于说明文件(怎样连接数据库等,以什么账号用于连接)

authdaemonrc  一个用于连接模块 (调用什么模块用于连接)

编辑两个文件:

Vim  Authmysqlrc

  MYSQL_SERVER            localhost

  MYSQL_USERNAME          extmail

  MYSQL_PASSWORD          extmail

  MYSQL_PORT          3306

  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/',homedir)

MYSQL_NAME_FIELD        name

MYSQL_MAILDIR_FIELD    concat('/var/mailbox/',maildir)

 

 

 

Vim  authdaemonrc

518a1530a992f.png

很好,在配置完之后我们需要启动,那么我们就取创建控制文件,

在源码的包里面我们找到init的文件,它就是控制文件了,所以进行修改

518a1531d118c.png

加权限

518a15333ca4b.png

尝试启动

518a153523b86.png

启动成功 加入开机启动

chkconfig  courier-authlib on

然后我们要将上面两个文件所产生的的库文件和头文件加入常用目录

vim /etc/ld.so.conf.d/courier-authlib.conf

518a1535d6ea7.png

ln -s /usr/local/courier-authlib/include/ /usr/include/courier-authlib

由我们的流程图可知,我们现在需要配置让postfix支持虚拟域

 

[root@mail include]# vim /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

我们看到里面的一些参数我们的文件里面都没有,不要慌,这几个参数是extman产生的

还有我们之前所配置的参数里有一些数据库,不过这些数据库不要我们创建,同样的extman给我们提供了,我们只需要导入即可(在下面我们拷贝到特定目录下)

那什么,由于extman不是源代码所以我们直接解压到本目录里面进行使用

518a15394f24c.png

看到数据库了,所以我们直接开始导入

518a153a57abd.png

在导入的时候可能会出现错误

518a153ca67dc.png

这个错误的原因是因为编写数据库的版本比当前安装的版本不相同。

将数据库文件内的所有TYPE=MyISAM修改为ENGINE=MyISAM,保存退出;

这样就可以了。

然后,在数据库导入之后我们需要进行授权,授予用户extmail访问extmail数据库的权限

518a160af27a3.png

然后呢,我们记得上面呢有几个地方是需要一些虚拟域,邮箱之类的文件的,所以我们现在将这些东西拷贝到特定的目录下去

[root@mail docs]# cp mysql_virtual_* /etc/postfix/

然后重启postfix

此时我们看一下上面的整个系统图,postfixmysql的连接现在是经过courier-authlib,所以现在需要修改smtp.conf (之前的是由cyrus-sasl连接的)

 

518a160bc9334.png

pwcheck_method:authdaemond

log_level:3

mech_list:LOGIN PLAIN

authdaemond_path:/usr/local/courier-authlib/var/spool/authdaemon/socket

然后将postfix   courier-authlibsaslauthd  这几个服务重启

接下来就是邮件接收器 dovecot  这里我们也用源码安装

useradd  -M  -s  /sbin/nologin  dovecot  安装之前首先创建用户

tar  zxf  dovecot-1.1.4.tar.gz  -C  /usr/local/src

cd  /usr/local/src/dovecot-1.1.4

./configure  --sysconfdir=/etc  --with-mysql

make

make  install

然后修改配置文件 和以前一样有样例的我们直接进行拷贝修改即可

cp  /etc/dovecot-example.conf  /etc/dovecot.conf

 

然后因为dovecot在接收的时候需要和数据库进行交互所以我们对配置文件进行修改使其实现交互功能

vi /etc/dovecot.conf

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

……

auth default {

    mechanisms = plain

    passdb sql {

        args = /etc/dovecot-mysql.conf

    }

    userdb sql {

        args = /etc/dovecot-mysql.conf

    }

……

可以看出需要几个目录 所以我们先创建mailbox(存放了用户注册用户域名的记录)目录

518a160c97e12.png

我们可以看到,mailbox的所属用户组和权限是root,显然不能满足我们的需求,我们要使注册的用户都可以有权限交互,所以修改其权限

[root@mail authdaemon]# chown -R postfix /var/mailbox/

其实很多东西在配置的时候它的配置文件里面都有说明的,大家一定要看哦!

在配置的时候我们需要的验证方式是通过mysql 所以将passdb pam 禁用掉

还有userdb我们也用的是mysql  所以将 userdb passwd 禁用掉,结果为:

vi /etc/dovecot.conf

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

……

auth default {

    mechanisms = plain

    passdb sql {

        args = /etc/dovecot-mysql.conf

    }

    userdb sql {

        args = /etc/dovecot-mysql.conf

    }

同时我们还需要修改postfix主配置文件 用以存放用户和邮件相关的文件

vim /etc/postfix/main.cf

home_mailbox = Maildir/

 记得在修改配置文件之后都要重启该服务的

这样我们就让dovecotmysql结合  然而 dovecot-mysql.conf里面要有一些查询mysql的一些方法,我们编写这些方法呗

 

 vi /etc/dovecot-mysql.conf     

 

181858815.jpg

  

然后我们重启一下dovecot试试

 /usr/local/sbin/dovecot  -c  /etc/dovecot.conf    

518a160deadff.png成功

~                

这样之后我们就剩下最后的extmailextman

这里extmail也是一个脚本所以我们直接解压到当前目录,apache和该脚本结合的时候需要cgiExtmailextman正常运行时需要一个官方定的目录,然后将解压完的目录移动到官方所定的目录下面命名为extmail

tar zxvf extmail-1.2.tar.gz

mkdir -pv /var/www/extsuite

mv extmail-1.2 /var/www/extsuite/extmail

mv extman-1.1 /var/www/extsuite/extman

配置webmail.cf

cp /var/www/extsuite/extmail/webmail.cf.default  /var/www/extsuite/extmail/webmail.cf 配置界面上的语言等

 181708761.jpg

 

配置webman.cf

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

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

SYS_MAILDIR_BASE = /var/mailbox   ---->  注册时邮件的基目录

SYS_CAPTCHA_ON = 0       ---->验证码 关闭

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

chown -R postfix.postfix /var/www/extsuite/extmail/cgi/            

chown -R postfix.postfix /var/www/extsuite/extman/cgi/      

 

 

配置完成之后就要配置apacheextmailextman的连接了

vim /etc/httpd/conf/httpd.conf

 

181806562.jpg

 

开始测试

登陆

http://192.168.102.100/

518a1612bb748.png

注册

518a16148058a.png

可以注册

然后我们建立虚拟域然后开始收发邮件的测试

管理员登陆  默认的账号密码为  root@extmail.org   extmail*123*

518a161a69926.png

创建一个a.com域和b.com

然后在a域里面创建两个用户

user1@a.comuser2@a.com

b域里面创建一个用户

user1@b.com

然后登陆开始收发

首先相同域内发送

518a161b85644.png

518a161ca7513.png

518a161fb9ec9.png

 

 

 

518a162104aa7.png

 

518a162594a9c.png

518a16274be2d.png

由上面几张图片可以看到都收发成功!

这样我们的extmail邮件服务器就算搭建成功了。

安装配置时大家要注意几点:

 首先是mysqlmysql.sock问题,找不到pid问题,数据库导入的问题,版本兼容的问题。

 其次是postfix配置时候的uidgid问题,

 最后就是连接apache时候文件目录的创建,文件的所属用户问题。

 大家可以根据问题自行解决,也可以查看我的其他博客解决。