1、系统需求说明

Extman 登录时的验证码需要 libXpm 的支持,统计图表需要 RRDtool 和 Perl 的 GD 模块的支持,Extman 还需要 Perl 的 Unix::Syslog 模块支持,mailgraph_ext 需要 Perl 的 File::Tail 模块支持。可以使用 /home/www/extsuite/extmail/tools/pkg_stats.sh 来查看还缺少什么模块。

2、添加数据库

使用 phpMyAdmin 或者其他的 MySQL 客户端,在 postfix 表中增加如下的表和初始管理员记录:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";

CREATE TABLE IF NOT EXISTS `alias` (
  `address` VARCHAR(255) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
  `goto` text COLLATE utf8_unicode_ci NOT NULL,
  `domain` VARCHAR(255) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
  `createdate` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
  `active` tinyint(1) NOT NULL DEFAULT '1',
  PRIMARY KEY (`address`),
  KEY `address` (`address`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='ExtMail - Virtual Aliases';

CREATE TABLE IF NOT EXISTS `alias_domain` (
  `alias_domain` VARCHAR(255) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
  `target_domain` VARCHAR(255) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
  `created` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
  `modified` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
  `active` tinyint(1) NOT NULL DEFAULT '1',
  PRIMARY KEY (`alias_domain`),
  KEY `active` (`active`),
  KEY `target_domain` (`target_domain`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Postfix Admin - Domain Aliases';

CREATE TABLE IF NOT EXISTS `domain` (
  `domain` VARCHAR(255) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
  `description` VARCHAR(255) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
  `hashdirpath` VARCHAR(255) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
  `maxalias` INT(10) NOT NULL DEFAULT '0',
  `maxusers` INT(10) NOT NULL DEFAULT '0',
  `maxquota` VARCHAR(16) COLLATE utf8_unicode_ci NOT NULL DEFAULT '0',
  `maxnetdiskquota` VARCHAR(16) COLLATE utf8_unicode_ci NOT NULL DEFAULT '0',
  `transport` VARCHAR(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `can_signup` tinyint(1) NOT NULL DEFAULT '0',
  `default_quota` VARCHAR(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `default_netdiskquota` VARCHAR(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `default_expire` VARCHAR(12) COLLATE utf8_unicode_ci DEFAULT NULL,
  `disablesmtpd` SMALLINT(1) DEFAULT NULL,
  `disablesmtp` SMALLINT(1) DEFAULT NULL,
  `disablewebmail` SMALLINT(1) DEFAULT NULL,
  `disablenetdisk` SMALLINT(1) DEFAULT NULL,
  `disableimap` SMALLINT(1) DEFAULT NULL,
  `disablepop3` SMALLINT(1) DEFAULT NULL,
  `createdate` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
  `expiredate` DATE NOT NULL DEFAULT '0000-00-00',
  `active` tinyint(1) NOT NULL DEFAULT '1',
  PRIMARY KEY (`domain`),
  KEY `domain` (`domain`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='ExtMail - Virtual Domains';

CREATE TABLE IF NOT EXISTS `domain_manager` (
  `username` VARCHAR(255) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
  `domain` VARCHAR(255) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
  `createdate` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
  `active` tinyint(1) NOT NULL DEFAULT '1',
  KEY `username` (`username`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Ext/Webman - Domain Admins';

CREATE TABLE IF NOT EXISTS `mailbox` (
  `username` VARCHAR(255) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
  `uid` VARCHAR(255) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
  `password` VARCHAR(255) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
  `clearpwd` VARCHAR(128) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
  `name` VARCHAR(255) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
  `mailhost` VARCHAR(255) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
  `maildir` VARCHAR(255) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
  `homedir` VARCHAR(255) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
  `quota` VARCHAR(16) COLLATE utf8_unicode_ci NOT NULL DEFAULT '0',
  `netdiskquota` VARCHAR(16) COLLATE utf8_unicode_ci NOT NULL DEFAULT '0',
  `domain` VARCHAR(255) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
  `uidnumber` INT(6) NOT NULL DEFAULT '1000',
  `gidnumber` INT(6) NOT NULL DEFAULT '1000',
  `createdate` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
  `expiredate` DATE NOT NULL DEFAULT '0000-00-00',
  `active` SMALLINT(1) NOT NULL DEFAULT '1',
  `disablepwdchange` SMALLINT(1) DEFAULT NULL,
  `disablesmtpd` SMALLINT(1) DEFAULT NULL,
  `disablesmtp` SMALLINT(1) DEFAULT NULL,
  `disablewebmail` SMALLINT(1) DEFAULT NULL,
  `disablenetdisk` SMALLINT(1) DEFAULT NULL,
  `disableimap` SMALLINT(1) DEFAULT NULL,
  `disablepop3` SMALLINT(1) DEFAULT NULL,
  `question` text COLLATE utf8_unicode_ci NOT NULL,
  `answer` text COLLATE utf8_unicode_ci NOT NULL,
  PRIMARY KEY (`username`),
  KEY `username` (`username`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='ExtMail - Virtual Mailboxes';

CREATE TABLE IF NOT EXISTS `manager` (
  `username` VARCHAR(255) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
  `password` VARCHAR(255) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
  `type` VARCHAR(64) COLLATE utf8_unicode_ci NOT NULL DEFAULT 'postmaster',
  `uid` VARCHAR(255) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
  `name` VARCHAR(255) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
  `question` text COLLATE utf8_unicode_ci NOT NULL,
  `answer` text COLLATE utf8_unicode_ci NOT NULL,
  `disablepwdchange` SMALLINT(1) DEFAULT NULL,
  `createdate` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
  `expiredate` DATE NOT NULL DEFAULT '0000-00-00',
  `active` tinyint(1) NOT NULL DEFAULT '1',
  PRIMARY KEY (`username`),
  KEY `username` (`username`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Ext/Webman - Admin Accounts';

INSERT INTO `manager` (`username`, `password`, `type`, `uid`, `name`, `question`, `answer`, `disablepwdchange`, `createdate`, `expiredate`, `active`) VALUES
('postmaster@domain.ltd', '$1$BrT9qxfB$Ha81Mb5YVV6rNKNN5jmtj1', 'admin', 'root', 'Super User', 'my question', 'my answer', 0, '2007-02-14 15:10:04', '2010-11-08', 1);

创建的初始管理员用户名是 postmaster@domain.ltd,初始密码是 extmail*123*,下面会用到。

3、安装 Extman/Extmail

1
2
3
4
5
6
mkdir /home/www/extsuite
tar -zxvf extmail-1.1.0.tar.gz  -C /home/www/
tar -zxvf extman-1.0.0.tar.gz -C /home/www/
ln -s /home/www/extman-1.0.0/ /home/www/extsuite/extman
ln -s /home/www/extmail-1.1.0/ /home/www/extsuite/extmail
chown vmail:vmail /home/www/ -R

4、配置 Apache 的虚拟主机

修改 /home/httpd/conf/extra/httpd-vhosts.conf,增加如下指令:

1
2
3
4
5
6
7
8
9
10
11
12
<VirtualHost *:80>
    ServerAdmin support@domain.ltd
    DocumentRoot "/home/www/extsuite/extmail/html"
    ServerName mail.domain.ltd
    ServerAlias domain.ltd
    ErrorLog "logs/ext-error_log"
    CustomLog "logs/ext-access_log" "common"
    ScriptAlias /extman/cgi/ /home/www/extsuite/extman/cgi/
    Alias /extman/ /home/www/extsuite/extman/html/
    ScriptAlias /extmail/cgi/ /home/www/extsuite/extmail/cgi/
    Alias /extmail/ /home/www/extsuite/extmail/html/
</VirtualHost>

5、安装 RRDtool

rrdtool-1.3.8.tar.gz 解压后,请参阅 doc/rrdbuild.txt 的指令安装 RRDtool 的依赖包和 RRDTool,注意首先执行下面的指令:

1
2
3
export INSTALL_DIR=/usr/local/rrdtool-1.3.8
export PKG_CONFIG_PATH=${INSTALL_DIR}/lib/pkgconfig
export PATH=$INSTALL_DIR/bin:$PATH

否则后面可能提示找不到依赖的库。

最后一步安装 rrdtool-1.3.8 包的时候,在 make install 后,执行:

1
2
3
make site-perl-instal
cp /lib/perl/5.10.0/i486-linux-thread-multi/RRDs.pm /usr/lib/perl5/site_perl/5.10.0/i486-linux-thread-multi/
cp /lib/perl/5.10.0/i486-linux-thread-multi/auto/* /usr/lib/perl5/site_perl/5.10.0/i486-linux-thread-multi/auto/ -R

安装 RRDtool 的 Perl 支持。

6、配置 Extman/Extmail

6.1、extman/webman.cf

编辑 /home/www/extsuite/extman/webman.cf,找到如下行:

1
2
3
4
5
6
7
8
9
10
SYS_CONFIG = /var/www/extsuite/extman/
SYS_LANGDIR = /var/www/extsuite/extman/lang
SYS_TEMPLDIR = /var/www/extsuite/extman/html
SYS_MAILDIR_BASE = /home/domains
# SYS_LANG = en_US
SYS_GROUPMAIL_SENDER = postmaster@extmail.org
SYS_MYSQL_USER = webman
SYS_MYSQL_PASS = webman
SYS_MYSQL_DB = extmail
SYS_MYSQL_SOCKET = /var/lib/mysql/mysql.sock

对应修改为如下:

1
2
3
4
5
6
7
8
9
10
SYS_CONFIG = /home/www/extsuite/extman/
SYS_LANGDIR = /home/www/extsuite/extman/lang
SYS_TEMPLDIR = /home/www/extsuite/extman/html
SYS_MAILDIR_BASE = /home/mailbox
SYS_LANG = zh_CN
SYS_GROUPMAIL_SENDER = postmaster@domain.ltd
SYS_MYSQL_USER = postfix
SYS_MYSQL_PASS = postfix_user_password
SYS_MYSQL_DB = postfix
SYS_MYSQL_SOCKET = /tmp/mysql.sock

6.2、extmail/webmail.cf

/home/www/extsuite/extmail/webmail.cf.default 在同目录复制为 webmail.cf,然后找到如下行:

1
2
3
4
5
6
7
8
9
10
11
12
SYS_CONFIG = /var/www/extsuite/extmail/
SYS_LANGDIR = /var/www/extsuite/extmail/lang
SYS_TEMPLDIR = /var/www/extsuite/extmail/html
SYS_SPAM_REPORT_TYPE = dspam
SYS_USER_LANG = en_US
SYS_MAILDIR_BASE = /home/domains
SYS_MYSQL_USER = db_user
SYS_MYSQL_PASS = db_pass
SYS_MYSQL_DB = extmail
SYS_MYSQL_SOCKET = /var/lib/mysql/mysql.sock
SYS_AUTHLIB_SOCKET = /var/spool/authdaemon/socket
SYS_G_ABOOK_FILE_PATH = /var/www/extsuite/extmail/globabook.cf

对应修改为如下:

1
2
3
4
5
6
7
8
9
10
11
12
SYS_CONFIG = /home/www/extsuite/extmail/
SYS_LANGDIR = /home/www/extsuite/extmail/lang
SYS_TEMPLDIR = /home/www/extsuite/extmail/html
SYS_SPAM_REPORT_TYPE = spamassassin
SYS_USER_LANG = zh_CN
SYS_MAILDIR_BASE = /home/mailbox
SYS_MYSQL_USER = postfix
SYS_MYSQL_PASS = 42R854
SYS_MYSQL_DB = postfix
SYS_MYSQL_SOCKET = /tmp/mysql.sock
SYS_AUTHLIB_SOCKET = /home/courier/authlib/var/spool/authdaemon/socket
SYS_G_ABOOK_FILE_PATH = /home/www/extsuite/extmail/globabook.cf

7、其他配置

修改 /home/www/extsuite/extman/addon/mailgraph_ext/mailgraph-init/home/www/extsuite/extman/addon/mailgraph_ext/qmonitor-init,分别找到:

1
2
MAILGRAPH_PL=/usr/local/mailgraph_ext/mailgraph_ext.pl
MAILGRAPH_PL=/usr/local/mailgraph_ext/qmonitor.pl

相应的修改为:

1
2
MAILGRAPH_PL=/home/www/extsuite/extman/addon/mailgraph_ext/mailgraph_ext.pl
MAILGRAPH_PL=/home/www/extsuite/extman/addon/mailgraph_ext/qmonitor.pl

初始化日志统计图所需要的目录:

1
/home/www/extsuite/extman/addon/mailgraph_ext/queue_mkrrd.sh