说明:Linux下的开源Webmail有多种选择,Extmail(基于Maildir/Perl)、Squirrelmail(基于PHP) 、RoundCube(PHP+JS)、Horde、Surgemail(HTML)、Zimbra、Open WebMail(Perl)、iRedMail等
本文使用的ExtMail&&ExtMan,是国内唯一开源免费的Webmail,前者是基于Maildir/Perl的webmail客户端,后者是支持MySQL/LDAP的邮件帐户管理系统;
还自带了MailGraph_ext,基于mailgrpah/rrdtool的日志采集分析系统。
ExtMail有专业版,功能更多更强大,也有开源免费版EMOS;
EMOS是一个基于CentOS4/5并集成邮件系统的Linux发行版,直接安装就可以使用;
官方网站:
http://www.extmail.org/
1、安装
下载extmail-1.2.tar.gz和extman-1.1.tar.gz到/usr/local/src目录。
(可以从本文附件中下载)
[root@mail ~]# cd /usr/local/src [root@mail src]# tar -zxvf extmail-1.2.tar.gz [root@mail src]# tar -zxvf extman-1.1.tar.gz [root@mail src]# mkdir /var/www/extsuite [root@mail src]# mv extman-1.1 /var/www/extsuite/extman [root@mail src]# mv extmail-1.2 /var/www/extsuite/extmail
2、配置extmail
[root@mail src]# cd /var/www/extsuite [root@mail extsuite]# cp extmail/webmail.cf.default extmail/webmail.cf [root@mail extsuite]# vi extmail/webmail.cf SYS_MYSQL_USER = extmail SYS_MYSQL_PASS = extmail SYS_MYSQL_DB = extmail
3、配置extman
[root@mail extsuite]# mkdir /var/www/extsuite/extman/session [root@mail extsuite]# cp extman/webman.cf.default extman/webman.cf [root@mail extsuite]# vi extman/webman.cf SYS_SESS_DIR = /var/www/extsuite/extman/session/ SYS_DEFAULT_UID = 1002 SYS_DEFAULT_GID = 1002
注意:用户和组1002是前一小节中创建的用户和组vmail,注意保持一致。
目录session用来保存临时会话信息。
4、初始化数据库
(1)给数据库root用户设置密码:
[root@mail extsuite]# service mysqld start [root@mail extsuite]# mysql -uroot mysql>set password for root@localhost=password('123456'); mysql>quit
(2)导入extmail数据库:
[root@mail extsuite]# mysql -uroot -p123456 < extman/docs/extmail.sql
说明:这里导入的是数据库extmail的表结构
(3)修改参数后导入数据:
[root@mail extsuite]# sed -i 's/extmail.org/yourmail.com/g' extman/docs/init.sql [root@mail extsuite]# sed -i 's/1000/1002/g' extman/docs/init.sql [root@mail extsuite]# mysql -uroot -p123456 < /var/www/extsuite/extman/docs/init.sql
说明:这里将数据库文件中的域名修改成你自己的,用户和组ID修改成1002;这里导入了默认域以及默认管理员账号的数据。
(4)查看数据库:
[root@mail extsuite]# mysql -uroot -p123456 mysql> use extmail; mysql> show tables; +-------------------+ | Tables_in_extmail | +-------------------+ | alias | | domain | | domain_manager | | mailbox | | manager | +-------------------+ mysql> select username,uidnumber,gidnumber from mailbox; +-------------------------+-----------+-----------+ | username | uidnumber | gidnumber | +-------------------------+-----------+-----------+ | [email protected] | 1002 | 1002 | +-------------------------+-----------+-----------+ 1 row in set (0.00 sec) mysql> quit
说明:表mailbox中存储的就是邮箱用户账号信息。
5、配置postfix
[root@mail extsuite]# cp extman/docs/mysql_*.cf /etc/postfix/ [root@mail extsuite]# vi /etc/postfix/main.cf # 添加 extmail 配置 virtual_alias_maps = mysql:/etc/postfix/mysql_virtual_alias_maps.cf virtual_mailbox_domains = mysql:/etc/postfix/mysql_virtual_domains_maps.cf virtual_mailbox_maps = mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf virtual_transport = maildrop virtual_uid_maps = static:1002 virtual_gid_maps = static:1002
6、设置权限和属主
[root@mail extsuite]# chown root.root -R extmail extman [root@mail extsuite]# chown -R vmail:vmail extmail/cgi/ extman/cgi/ extman/session
7、配置Apache虚拟主机
[root@mail extsuite]# vi /etc/httpd/conf.d/extmail.conf # VirtualHost for ExtMail Solution NameVirtualHost *:80 <VirtualHost *:80> ServerName mail.yourmail.com DocumentRoot /var/www/extsuite/extmail/html/ ScriptAlias /extmail/cgi/ /var/www/extsuite/extmail/cgi/ Alias /extmail /var/www/extsuite/extmail/html/ ScriptAlias /extman/cgi/ /var/www/extsuite/extman/cgi/ Alias /extman /var/www/extsuite/extman/html/ # Suexec config SuexecUserGroup vmail vmail </VirtualHost>
8、重启
[root@mail extsuite]# service postfix restart [root@mail extsuite]# service httpd restart [root@mail extsuite]# chkconfig postfix on [root@mail extsuite]# chkconfig httpd on
9、建立Maildir
(1)手动建立Maildir
用于存放用户邮件的目录;在WEB上创建其他域名邮箱,会在此自动建立相应域名目录。
[root@mail extsuite]# cd extman/tools [root@mail tools]# ./maildirmake.pl /home/domains/yourmail.com/postmaster/Maildir [root@mail tools]# chown -R vmail:vmail /home/domains
(2)测试authlib认证登陆账号
必须先启动authdaemond进程,否则报Authentication FAILED: Operation not permitted
[root@mail tools]# /usr/local/sbin/authtest -s login [email protected] extmail Authentication succeeded. Authenticated: [email protected] (uid 1002, gid 1002) Home Directory: /home/domains/yourmail.com/postmaster Maildir: /home/domains/yourmail.com/postmaster/Maildir/ Quota: 104857600S Encrypted Password: $1$phz1mRrj$3ok6BjeaoJYWDBsEPZb5C0 Cleartext Password: extmail Options: (none)
说明:输出表明ExtMan的安装正确,数据库也正确导入,courier-authlib能正确连接到mysql数据库。
10、安装其他依赖包
(1)安装绘图工具
图形日志是基于RRDTOOL工具进行绘制图表的。
[root@mail tools]# yum install -y rrdtool rrdtool-perl
(2)安装依赖perl模块
说明:在运行mailgraph-init和访问http://10.188.1.86/extmail时会报错,
显示如下信息开头,是因为缺少相应的perl模块:
Can't locate RRDs.pm in @INC '''
#安装perl环境 [root@mail tools]# yum install -y cpan perl #安装perl软件包 [root@mail tools]# yum install -y perl-YAML perl-Test-Exception perl-Crypt-PasswdMD5 perl-GD perl-CGI perl-Time-HiRes #使用CPAN安装YUM源中没有的perl包 [root@mail tools]# perl -MCPAN -e 'install Time::HiRes::Value' [root@mail tools]# perl -MCPAN -e 'install File::Tail' [root@mail tools]# perl -MCPAN -e 'install Unix::Syslog' [root@mail tools]# perl -MCPAN -e 'install DB_File' [root@mail tools]# perl -MCPAN -e 'install Encode::HanExtra'
可以在CPAN官方网站搜索perl模块包:
http://search.cpan.org/
Encode::HanExtra用于解决收到个别邮件内容显示乱码(gb18030)问题;
Perl-5.8.8或以下缺少了GB18030码表,现在用的5.10.1不知道加上没有,装上总是好的。
(3)启动进程
[root@mail tools]# cd /var/www/extsuite/extman [root@mail extman]# cp -R addon/mailgraph_ext/ /usr/local/ [root@mail extman]# /usr/local/mailgraph_ext/mailgraph-init start Starting mail statistics grapher: mailgraph_ext Starting queue statistics grapher: qmonitor [root@mail courier-unicode-1.1]# ps aux|grep mailgraph_ext root 63848 0.0 0.5 187384 5884 ? SNs 15:53 0:00 /usr/bin/perl -w /usr/local/mailgraph_ext/mailgraph_ext.pl -l /var/log/maillog -d --daemon-pid=/var/run/mailgraph.pid --daemon-rrd=/var/lib root 63850 0.2 0.4 181624 4204 ? SNs 15:53 0:00 /usr/bin/perl -w /usr/local/mailgraph_ext/qmonitor.pl -d --daemon-pid=/var/run/qmonitor.pid --daemon-rrd=/var/lib root 63852 0.0 0.0 103256 852 pts/1 S+ 15:53 0:00 grep mailgraph_ext [root@mail extman]# /var/www/extsuite/extman/daemon/cmdserver -v -d loaded ok [root@mail extman]# ps aux|grep cmdserver root 36597 0.0 0.5 144572 5288 ? Ss 10:23 0:00 /usr/bin/perl -w /var/www/extsuite/extman/daemon/cmdserver -v -d root 36568 0.0 0.0 112656 980 pts/1 S+ 10:21 0:00 grep --color=auto cmdserver [root@mail extman]# echo "/usr/local/mailgraph_ext/mailgraph-init start" >> /etc/rc.d/rc.local [root@mail extman]# echo "/var/www/extsuite/extman/daemon/cmdserver -v -d" >> /etc/rc.d/rc.local
说明:进程mailgraph-init用于生成图形日志;进程cmdserver用于生成extman主页的系统信息。
(4)定时任务
[root@mail extman]# crontab -e 0 4 * * * /var/www/extsuite/extman/tools/expireusers.pl -all [email protected] 30 4 * * * /var/www/extsuite/extman/tools/reportusage.pl -all /home/domains [email protected] [root@mail extman]# service crond restart
说明:每天4点发送关于用户到期的报告给管理员邮箱;
每天4点半发送邮箱容量使用情况报告给管理员邮箱。
11、测试WEB访问
(1)访问邮箱
http://mail.yourmail.com/extmail/
账号:postmaster 密码:extmail 域名:yourmail.com
登陆后给自己发封邮件测试,查看日志:
[root@mail ~]# tailf /var/log/maillog Dec 1 16:11:00 mail postfix/smtpd[63996]: connect from localhost[127.0.0.1] Dec 1 16:11:00 mail postfix/smtpd[63996]: 31C081A1B7F: client=localhost[127.0.0.1] Dec 1 16:11:00 mail postfix/cleanup[64003]: 31C081A1B7F: message-id=<[email protected]> Dec 1 16:11:00 mail postfix/qmgr[63952]: 31C081A1B7F: from=<[email protected]>, size=649, nrcpt=1 (queue active) Dec 1 16:11:00 mail postfix/smtpd[63996]: disconnect from localhost[127.0.0.1] Dec 1 16:11:00 mail postfix/pipe[64005]: 31C081A1B7F: to=<[email protected]>, relay=maildrop, delay=0.2, delays=0.09/0.03/0/0.09, dsn=2.0.0, status=sent (delivered via maildrop service) Dec 1 16:11:00 mail postfix/qmgr[63952]: 31C081A1B7F: removed
说明:这就是Postfix的一个最基本的邮件传递过程。
(2)访问邮箱管理后台
http://mail.yourmail.com/extman/
账号:[email protected] 密码:extmail*123*
验证码的显示需要安装perl-GD,也可以取消验证码:
[root@mail extsuite]# vi /var/www/extsuite/extman/webman.cf SYS_CAPTCHA_ON=0
说明:上图是我全部装完后的截图,仅有两个状态显示正常,重启系统后会显示MTA\WEB\MYSQL的。
12、检查Maildrop
(1)查看版本信息:
[root@mail extsuite]# maildrop -v maildrop 2.7.2 Copyright 1998-2005 Double Precision, Inc. GDBM/DB extensions enabled. Courier Authentication Library extension enabled. #必须有这条 Maildir quota extension are now always enabled. This program is distributed under the terms of the GNU General Public License. See COPYING for additional information.
(2)测试maildrop连接
[root@mail extsuite]# echo "test" | maildrop -V 10 -d [email protected] maildrop: authlib: groupid=1002 maildrop: authlib: userid=1002 maildrop: authlib: [email protected], home=/home/domains/yourmail.com/postmaster, mail=/home/domains/yourmail.com/postmaster/Maildir/ maildrop: Changing to /home/domains/yourmail.com/postmaster Message envelope sender=MAILER-DAEMON maildrop: Attempting .mailfilter maildrop: Delivery complete.
(3)问题分析
测试maildrop报错:
[root@mail ~]# echo "test" | maildrop -V 10 -d [email protected] maildrop: authlib: groupid=1002 maildrop: authlib: userid=1002 maildrop: authlib: [email protected], home=/home/domains/yourmail.com/postmaster, mail=/home/domains/yourmail.com/postmaster/Maildir/ maildrop: Changing to /home/domains/yourmail.com/postmaster maildrop: Unable to change to home directory.
登陆WEB页面报错:
"Can't chdir to /home/domains/Mydomain.com/tester/Maildir/, Permission denied "
客户端FOXMAIL报错:
C1 no login 登陆错误请输入密码
在WEBMAN后台创建用户,不会生成邮件目录。
原因是邮件目录权限问题;主要从以下7个方面解决:
1)确认邮件系统用户和组:vmail.vmail,ID=1002
2)确认WEBMAN配置
[root@mail ~]# vi /var/www/extsuite/extman/webman.cf SYS_DEFAULT_UID = 1002 SYS_DEFAULT_GID = 1002
3)确认POSTFIX配置
[root@mail extsuite]# vi /etc/postfix/main.cf virtual_uid_maps = static:1002 virtual_gid_maps = static:1002
4)确认AUTHLIB配置
[root@mail ~]# vi /usr/local/etc/authlib/authmysqlrc MYSQL_UID_FIELD '1002' MYSQL_GID_FIELD '1002'
5)确认编译安装MAILDROP时添加了以下参数
--enable-maildrop-uid=1002 --enable-maildrop-gid=1002
6)确认邮件目录属于vmail
[root@mail tools]# chown vmail.vmail -R /home/domains/ [root@mail tools]# ll /home/domains/ total 16 drwx------ 3 vmail vmail 4096 Dec 30 10:28 seconed.cn drwx------ 4 vmail vmail 4096 Dec 30 10:28 yourmail.com
7)确认链接符号权限
[root@mail tools]# ll -a /home/domains/ total 16 drwxr-xr-x 4 vmail vmail 4096 Dec 30 10:28 . drwxr-xr-x. 7 root root 4096 Dec 30 10:27 .. drwx------ 3 vmail vmail 4096 Dec 30 10:28 seconed.cn drwx------ 4 vmail vmail 4096 Dec 30 10:28 yourmail.com [root@mail tools]# ll -a /home/ total 56 drwxr-xr-x. 7 root root 4096 Dec 30 10:27 . drwxr-xr-x. 25 root root 4096 Dec 30 08:43 .. drwxr-xr-x 4 vmail vmail 4096 Dec 30 10:28 domains
这一点是最难发现的,很多网友发贴说1-6点都设置了怎么还是不行,可能就是这第7点造成的;
每个目录都有当前目录链接符号"."和上层目录链接符号"..",如果vmail用户没有对其操作的权限(如执行cd ..)则会报错,不信可以chmod 700 /home/.试试;
如果你执行
[root@mail ~]# chmod 700 /home/..
会报以下错
[root@mail ~]# echo "test" | maildrop -V 10 -d [email protected] maildrop: authlib: groupid=1002 maildrop: authlib: userid=1002 maildrop: authlib: [email protected], home=/home/domains/yourmail.com/postmaster, mail=/home/domains/yourmail.com/postmaster/Maildir/ maildrop: You are not a trusted user.
结论:确保/home/和/home/domains/两个目录下的两个链接符号权限为755。
13、检查是否自动创建Maildir
在webman中创建一个邮箱用户test;
检查是否会在/home/domains下自动生成test邮箱目录:
[root@mail tools]# ll /home/domains/yourmail.com/ 总用量 8 drwx------. 3 vmail vmail 4096 12月 1 15:05 postmaster drwx------. 3 vmail vmail 4096 12月 1 16:24 test
小结:
第一阶段完成:实现Postfix邮箱基础架构Apache+MySQL+Php+Postfix+CourierAuthlib+Maildrop+Extmail+Extman+mailgraph_ext+RRDTool