以前maillist都是用的std方式,在文件中存放邮件列表成员,不很方便,为了用php统*管理数据库,对ezmlm进行了重新编译。
在debian下, 带了ezmlm的源码,和*个build-ezmlm,需要执行build-ezmlm来编译生成*个deb包,我们执行build-ezmlm第*步展开完成后
*不要编译,要修改几个地方,然后再编译,
源码在/tmp/ezmlm
我们要修改的是2个地方, 第*个是debian/rules 文件
$(MAKE) std
$(MAKE)
改成
$(MAKE) mysql
$(MAKE)
$(MAKE) ch_gb
编译mysql支持, 并使用中文
还有就是debian带的ezmlm的源码,在mysql有个bug,要修改sub_mysql/opensql.c:
--- ezmlm-0.53/sub_mysql/opensql.c.orig 2009-11-20 23:48:06.000000000 +0800
+++ ezmlm-0.53/sub_mysql/opensql.c 2009-11-20 23:48:49.000000000 +0800
@@ -92,7 +92,7 @@
if (!*table) return ERR_NO_TABLE;
}
if (!psql) {
- if (!((MYSQL *) psql = mysql_init((MYSQL *) 0)))
+ if (!(psql =(void *)mysql_init((MYSQL *) 0)))
return ERR_NOMEM; /* init */
if (!(mysql_real_connect((MYSQL *) psql, host, user, pw, db,
(unsigned int) port, 0, CLIENT_COMPRESS))) /* conn */
修改完成后,执行
cd /tmp/ezmlm/ezmlm-0.53
dpkg-buildpackage -rfakeroot
完成后,在/tmp/ezmlm/会生成几个包, 源码包已经包含了我们上面的修改,可以复制备份
我们需要的程序在2进制包 ezmlm-idx_0.53-11_amd64.deb
安装:
dpkg -i /tmp/ezmlm/ezmlm-idx_0.53-11_amd64.deb
带了mysql支持的ezmlm仍然可以使用原来的std文件方式存放帐号列表,所以可以放心覆盖安装,
下面说*下怎么把这些帐号平滑移动到mysql里面,
在移动前,**获得列表, 假设邮件列表地址是loongson@anheng.com
那么文件目录就在 /home/vpopmail/domains/anheng.com/loongson
获取列表用ezmlm-list
ezmlm-list /home/vpopmail/domains/anheng.com/loongson >/home/loongson.txt
把*个std模式的邮件列表切换到mysql方式, 需要3个修改
1.建立文件 /home/vpopmail/domains/anheng.com/loongson/sql
内容只有*行:
localhost:3306:user:passwd:ezmlm:loongson
2.修改/home/vpopmail/domains/anheng.com/loongson/config,在6:后面增加如下内容:localhost:3306:user:passwd:ezmlm:loongson
3.修改/home/vpopmail/domains/anheng.com/loongson/config,将X:行去掉。
修改前后比较如下:
--- /dev/null 2009-11-21 01:36:45.000000000 +0800
+++ /home/vpopmail/domains/anheng.com/loongson/config 2009-11-21 01:10:28.000000000 +0800
@@ -0,0 +1,1 @@
+localhost:3306:user:passwd:ezmlm:loongson
--- /home/vpopmail/domains/anheng.com/loongson/config.orig 2009-11-21 01:36:45.000000000 +0800
+++ /home/vpopmail/domains/anheng.com/loongson/config 2009-11-21 01:10:28.000000000 +0800
@@ -1,5 +1,4 @@
F:-abCDEFGHIJKLmNOpqRSTuVWXYZ
-X:
D:/home/vpopmail/domains/anheng.com.cn/loongson
T:/home/vpopmail/domains/anheng.com.cn/.qmail-loongson
L:net
@@ -9,7 +8,7 @@
3:
4:
5:liushiwei@anheng.com.cn
-6:
+6:localhost:3306:user:passwd:ezmlm:loongson
7:
8:
9:
内容解释
localhost mysql服务器地址
3306 mysql端口
user mysql帐号
passwd mysql密码
ezmlm mysql的库*
loongson 表格前缀
每个maiilist地址,需要在库中建立若干个表,其中*重要的表是loongson , 这里面放的就是成员*单。
2个字段 hash和address, address就是邮件地址,hash是*个0-50的随机数, 估计用于散列文件到不同的目录。
修改好config后,再执行ezmlm-list 会提示没有表,这时候我们要用ezmlm-mktab来建立数据库表
ezmlm-mktab用来生成建立数据库表的sql语句, 它是个bash脚本,只需要*个参数,表格前缀
生成的sql语句,我们可以直接管道到mysql命令
ezmlm-mktab loongson |mysql -u user -ppasswd ezmlm
然后再执行ezmlm-list /home/vpopmail/domains/anheng.com/loongson 结果不再提示错误,但是成员列表是空的,
我们可以使用前面备份的列表文件loongson.txt来重新加入
用vi的替换功能,在loongson.txt的每*行前面增加*些东西, 把它变成*个脚本
替换之前:
001@anheng.com
002@anheng.com
...
替换之后:
ezmlm-sub /home/vpopmail/domains/anheng.com/loongson 001@anheng.com.cn
ezmlm-sub /home/vpopmail/domains/anheng.com/loongson 002@anheng.com.cn
...
vi替换命令:[esc]:%s/^/ezmlm-sub \/home\/vpopmail\/domains\/anheng.com\/loongson/g
用替换之后的文件,执行导入
cat /home/loongson.txt |/bin/bash
这就可以了。ezmlm已经从文件方式存储帐号,更换到数据库方式管理帐号,
使用数据方式后,可以很容易的实现php的web方式进行订阅,或者跟其他的erp等进行整合