說明: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發行版,直接安裝就可以使用;
官方網站:
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模塊包:
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