免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1823 | 回复: 1
打印 上一主题 下一主题

[Mail] 转载:ezmlm/ezmlm-idx的协同工作机制 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-12-05 10:45 |只看该作者 |倒序浏览
最近因为公司要用到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 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2006-12-05 12:12 |只看该作者
不错不错.顶
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP