说明: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./
1、安装 下载extmail-1.2.tar.gz和extman-1.1.tar.gz到/usr/local/src目录。 (可以从本文附件中下载) 1 2 3 4 5 6 | [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 1 2 3 4 5 6 | [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 1 2 3 4 5 6 | [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用户设置密码: 1 2 3 4 | [root@mail extsuite] # service mysqld start
[root@mail extsuite] # mysql -uroot
mysql> set password for root@localhost=password( '123456' );
mysql>quit
|
(2)导入extmail数据库: 1 | [root@mail extsuite] # mysql -uroot -p123456 < extman/docs/extmail.sql
|
说明:这里导入的是数据库extmail的表结构 (3)修改参数后导入数据: 1 2 3 | [root@mail extsuite] # sed -i 's///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)查看数据库: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | [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 |
+-------------------------+-----------+-----------+
| postmaster@ | 1002 | 1002 |
+-------------------------+-----------+-----------+
1 row in set (0.00 sec)
mysql> quit
|
说明:表mailbox中存储的就是邮箱用户账号信息。
5、配置postfix 1 2 3 4 5 6 7 8 9 | [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、设置权限和属主 1 2 | [root@mail extsuite] # chown root.root -R extmail extman
[root@mail extsuite] # chown -R vmail:vmail extmail/cgi/ extman/cgi/ extman/session
|
7、配置Apache虚拟主机 1 2 3 4 5 6 7 8 9 10 11 12 13 | [root@mail extsuite] # vi /etc/httpd/conf.d/extmail.conf
# VirtualHost for ExtMail Solution
NameVirtualHost *:80
<VirtualHost *:80>
ServerName mail.
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、重启 1 2 3 4 | [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上创建其他域名邮箱,会在此自动建立相应域名目录。 1 2 3 | [root@mail extsuite] # cd extman/tools
[root@mail tools] # ./maildirmake.pl /home/domains//postmaster/Maildir
[root@mail tools] # chown -R vmail:vmail /home/domains
|
(2)测试authlib认证登陆账号 必须先启动authdaemond进程,否则报Authentication FAILED: Operation not permitted 1 2 3 4 5 6 7 8 9 | [root@mail tools] # /usr/local/sbin/authtest -s login postmaster@ extmail
Authentication succeeded.
Authenticated: postmaster@ (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工具进行绘制图表的。 1 | [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 ''' 1 2 3 4 5 6 7 8 9 10 | #安装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./ Encode::HanExtra用于解决收到个别邮件内容显示乱码(gb18030)问题; Perl-5.8.8或以下缺少了GB18030码表,现在用的5.10.1不知道加上没有,装上总是好的。
(3)启动进程 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | [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)定时任务 1 2 3 4 | [root@mail extman] # crontab -e
0 4 * * * /var/www/extsuite/extman/tools/expireusers .pl -all postmaster@
30 4 * * * /var/www/extsuite/extman/tools/reportusage .pl -all /home/domains postmaster@
[root@mail extman] # service crond restart
|
说明:每天4点发送关于用户到期的报告给管理员邮箱; 每天4点半发送邮箱容量使用情况报告给管理员邮箱。
11、测试WEB访问 (1)访问邮箱 http://mail./extmail/ 1 2 3 | 账号:postmaster
密码:extmail
域名:
|
登陆后给自己发封邮件测试,查看日志: 1 2 3 4 5 6 7 8 | [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 =<20141201081100.31C081A1B7F@mail.>
Dec 1 16:11:00 mail postfix /qmgr [63952]: 31C081A1B7F: from=<postmaster@>, 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=<postmaster@>, 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./extman/ 验证码的显示需要安装perl-GD,也可以取消验证码: 1 2 | [root@mail extsuite] # vi /var/www/extsuite/extman/webman.cf
SYS_CAPTCHA_ON=0
|
说明:上图是我全部装完后的截图,仅有两个状态显示正常,重启系统后会显示MTA\WEB\MYSQL的。
12、检查Maildrop (1)查看版本信息:
1 2 3 4 5 6 7 | [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连接 1 2 3 4 5 6 7 8 | [root@mail extsuite] # echo "test" | maildrop -V 10 -d postmaster@
maildrop: authlib: groupid=1002
maildrop: authlib: userid=1002
maildrop: authlib: logname =postmaster@, 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报错:
1 2 3 4 5 6 | [root@mail ~] # echo "test" | maildrop -V 10 -d postmaster@
maildrop: authlib: groupid=1002
maildrop: authlib: userid=1002
maildrop: authlib: logname =postmaster@, 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页面报错: 1 | "Can't chdir to /home/domains/Mydomain.com/tester/Maildir/, Permission denied "
|
客户端FOXMAIL报错: 在WEBMAN后台创建用户,不会生成邮件目录。
原因是邮件目录权限问题;主要从以下7个方面解决: 1)确认邮件系统用户和组:vmail.vmail,ID=1002 2)确认WEBMAN配置 1 2 3 | [root@mail ~] # vi /var/www/extsuite/extman/webman.cf
SYS_DEFAULT_UID = 1002
SYS_DEFAULT_GID = 1002
|
3)确认POSTFIX配置 1 2 3 | [root@mail extsuite] # vi /etc/postfix/main.cf
virtual_uid_maps = static:1002
virtual_gid_maps = static:1002
|
4)确认AUTHLIB配置 1 2 3 | [root@mail ~] # vi /usr/local/etc/authlib/authmysqlrc
MYSQL_UID_FIELD '1002'
MYSQL_GID_FIELD '1002'
|
5)确认编译安装MAILDROP时添加了以下参数 1 | --enable-maildrop-uid=1002 --enable-maildrop-gid=1002
|
6)确认邮件目录属于vmail
1 2 3 4 5 | [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
|
7)确认链接符号权限 1 2 3 4 5 6 7 8 9 10 11 | [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
[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/.试试; 如果你执行 1 | [root@mail ~] # chmod 700 /home/..
|
会报以下错
1 2 3 4 5 | [root@mail ~] # echo "test" | maildrop -V 10 -d postmaster@
maildrop: authlib: groupid=1002
maildrop: authlib: userid=1002
maildrop: authlib: logname =postmaster@, 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邮箱目录: 1 2 3 4 | [root@mail tools] # ll /home/domains//
总用量 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
|