- 论坛徽章:
- 0
|
最近因为公司要用到ezmlm,于是在网上查找相关资料,发现这方面的资料比较欠缺。于是,将找到的资料整理了一下,供大家参考;小弟水平有限,如有错误,敬请大家指出。
____________________________________________________________________________
Ezmlm是easy mailing list management的缩写,是基于qmail的一个高效、易用的邮件列表管理器,用户可以使用它创建自己的邮件列表。ezmlm 非常可靠,即使面临系统突然断电的严重问题,它也不会丢失信件。ezmlm可以处理超大规模的邮件列表而不会受系统资源的限制。
ezmlm-idx是对ezmlm的扩展,它修订了ezmlm的部分功能并提供了扩展的其他丰富功能,使得管理和创建邮件列表更加简单、有效。特别是,它提供了MySQL和pgSQL的支持,使得更加容易同其他应用共享邮件列表的信息。
ezmlm的工作机制:
ezmlm在qmail-local中介入qmail邮件处理,通过设置特定的dot-qmail文件,从而实现邮件列表的功能,下面通过实例介绍ezmlm创建的dot-qmail文件及其处理流程。
假定我们在虚拟域mail.test.com上使用ezmlm新建了邮件列表list-all@mail.test.com,ezmlm会在~vpopmail/domains/mail.test.com目录下创建dot-qmail符号链接文件:
ls –la /home/vpopmail/domains/mail.test.com
________________________________________
.qmail-list-all@ -> /home/vpopmail/domains/mail.test.com/list-all/editor
.qmail-list-all-default@ -> /home/vpopmail/domains/mail.test.com/list-all/manager
.qmail-list-all-owner@ -> /home/vpopmail/domains/mail.test.com/list-all/owner
.qmail-list-all-return-default@ -> /home/vpopmail/domains/mail.test.com/list-all/bouncer
________________________________________
这四个dot-qmail文件分别负责邮件向邮件列表投递(list-all)、远程邮件管理(list-all-default)、向邮件管理者投递(list-all-owner)和邮件反弹处理(list-all-return-default)。
下面通过分析.qmail-list-all文件,来剖析ezmlm的工作机制:
cat .qmail-list-all
________________________________________
|/usr/local/bin/ezmlm/ezmlm-reject '/home/vpopmail/domains/mail.test.com/list-all'
|/usr/local/bin/ezmlm/ezmlm-issubn '/home/vpopmail/domains/mail.test.com/list-all' '/home/vpopmail/domains/mail.test.com/list-all/digest' '/home/vpopmail/domains/mail.test.com/list-all/allow' '/home/vpopmail/domains/mail.test.com/list-all/mod' || { echo "Sorry, only subscribers may post. If you are a subscriber, please forward this message to list-all-owner@mail.test.com to get your new address included (#5.7.2)"; exit 100 ; }
|/usr/local/bin/ezmlm/ezmlm-send '/home/vpopmail/domains/mail.test.com/list-all'
|/usr/local/bin/ezmlm/ezmlm-warn '/home/vpopmail/domains/mail.test.com/list-all' || exit 0
________________________________________
由本文第一部分对dot-qmail文件的介绍,可见.qmail-list-all文件中每行都以 | 符号开始,后面跟随的为投递程序。下面这个介绍这四个程序:
l ezmlm-reject dir
该程序用来拒绝垃圾邮件,具体办法是检查邮件头中是否包含Precedence:junk;后面所跟的参数dir用来读取dir/msgsize中的邮件体最大值/最小值;ezmlm-reject还可以拒绝邮件体中特定的mime parts,拒绝规则在dir/mimerejects文件中定义(注意,ezmlm-reject只对要拒绝的mimeparts做标记,具体的剥离过程在ezmlm-send中进行)。
l ezmlm-issubn
该程序用来检查邮件投递人是否属于该邮件列表,包括digest,allow,mod。如果ezmlm-issubn检查结果为失败,则返回错误提示消息给投递者,错误推出码为100。
l ezmlm-send dir
ezmlm-send的具体工作是将邮件投递到邮件列表,并对投递的邮件做其它相应处理。如果dir/archived文件存在,则ezmlm-send会为该投递邮件保留一个备份;如果dir/indexed文件存在,会为邮件建立索引;另外,dir/charset文件会定义邮件的字符编码处理;dir/maillinglist文件中定义了在邮件头处添加的Mailling-List字段;dir/listid文件将定义如何为邮件添加list-ID,这也是可选的。
在经过上面这些处理后,ezmlm-send在邮件中添加dir/headeradd中的新字段,并将标签<#h#>、<#l#>和<#n#>替换为list-host-name、list-local-name和message number,然后输出合适的Delivered-To行。接下来,ezmlm-send去除在dir/mimeremove中明确的MIME part;如果dir/prefix文件存在且不为空,则按该文件的内容为邮件主题加前缀。另外,如果前缀中包含#符号,最后一个#号将会被替换为邮件编号。
注意,前缀的添加是违反Internet Mail Standards的,ezmlm提供这一功能是因为用户的习惯和需求。
最后,ezmlm-send不投递反弹邮件至邮件列表。
l ezmlm-warn
ezmlm-warn检查该邮件列表是否有合适的反弹消息需要发送,如果有则发送反弹消息,没有则自动退出。
远程邮件管理(list-all-default)、向邮件管理者投递(list-all-owner)和邮件反弹处理(list-all-return-default)的工作机制则同邮件列表投递类似。
[ 本帖最后由 leo4364088 于 2006-12-5 10:49 编辑 ] |
|