日志标签 Mailman
群英汇邮件列表更新
11月12日
经过近两周的工作,群英汇邮件列表系统(Mailman)更新了,主要修正了以下四个方面的问题。
归档附件链接由绝对路径改为相对路径
发给邮件列表的邮件若有附件,Mailman 在生成归档网页时会将附件保存到相应文件,并在归档网页中建立链接。通常会用华丽的分割符“—”来界限,然后是相应的链接。链接是相应归档附件的绝对地址,即用 http打头,紧跟着是域名,可以点击链接查看或下载附件。
群英汇邮件列表有一个改进就是将绝对地址转换为相对地址,这样当用户的邮件列表主机的域名修改后或者因为安全上的需要由HTTP转换为HTTPS协议的时候,归档的链接也依然有效。否则,在更换域名时这些网页必须重新生成,这对有大量邮件存档的服务器来说将是一个梦魇。
但是,群英汇之前的实现有一个副作用,就是当使用相对路径则没有生成链接,而只是文本显示出来
-------------- next part -------------- 一个HTML附件被移除... URL: </mailman/private/tech/attachments/20101111/79f938b2/attachment.htm>
在经过反复的研究之后,终于定位在代码 Mailman/Archiver/HyperArch.py:
158 # Argh! This pattern is buggy, and will choke on URLs with GET parameters. 159 # MAS: Given that people are not constrained in how they write URIs in plain 160 # text, it is not possible to have a single regexp to reliably match them. 161 # The regexp below is intended to match straightforward cases. Even humans 162 # can't reliably tell whether various punctuation at the end of a URI is part 163 # of the URI or not. 164 urlpat = re.compile(r'([a-z]+://.*?)(?:_\s|_$|$|[]})>\'"\s])', re.IGNORECASE)
神马意思呢?就是说:
当你看到这个正则表达式的时候,它已下了一个艰难的决定,就是以http://开头的文本行将进行一系列操作,添加上<a>标签,制作成链接,否则无视。
我们为了让相对URL和绝对URL不再打架,不再让用户为难,我们做出一个超级强大的正则表达式,并和QQ 100% 兼容。
index a532c81..9aa8c6f 100644
--- a/Mailman/Archiver/HyperArch.py
+++ b/Mailman/Archiver/HyperArch.py
@@ -161,7 +161,7 @@ emailpat = re.compile(r'([-+,.\w]+@[-+.\w]+)')
# The regexp below is intended to match straightforward cases. Even humans
# can't reliably tell whether various punctuation at the end of a URI is part
# of the URI or not.
-urlpat = re.compile(r'([a-z]+://.*?)(?:_\s|_$|$|[]})>\'"\s])', re.IGNORECASE)
+urlpat = re.compile(r'(?P<prefix>url:\s*<)?(?P<url>(?(prefix)[^\s\'">]+|[a-z]+://.*?))(?:_\s|_$|$|[])>\'"\s])', re.IGNORECASE)
# Blank lines
blankpat = re.compile(r'^\s*$')
@@ -1224,19 +1225,19 @@ class HyperArchive(pipermail.T):
if kr is None:
k = -1
else:
- k = kr.start(0)
+ k = kr.start('url')
if j != -1 and (j < k or k == -1):
text = jr.group(1)
length = len(text)
... ...
URL = 'mailto:' + text
pos = j
elif k != -1 and (j > k or j == -1):
- text = URL = kr.group(1)
+ text = URL = kr.group('url')
length = len(text)
pos = k
else: # j==k
上面的正则表达式有哪位网友不解,待我有时间,下回分解。
归档html附件取消转义
默认Mailman会将HTML格式文本进行转义,在点HTML附件链接时看到的是HTML源码。而实际上用户更希望看到的是实际显示的内容。仔细分析以后发现,原来有一个转义函数,将文本里的HTML标签进行了转义,然后还自己定义了一个<tt>标签把这些内容括起来,为的是让显示更加规整。
整个注释掉此转义函数,这样邮件的 HTML 附件能够在归档中直接以 HTML 显示了。风险也是有的,就是会让列表的 HTML 归档被滥用,如用 HTML 链接进行 SEO 等,不过公司或团队范围使用,大可放心,没有哪个用户胆敢发送垃圾邮件。
自动回复邮件首选reply-to地址,其次是From地址
有时我们发邮件不希望自动回复到发件人地址,就需要提供一个 reply-to 地址。
我们的一个客户在使用邮件列表时,设置了自动回复器用于人员招聘等工作,发现从 51job 发送的简历的求职者的邮件地址都放到了 Reply-To 邮件头。由于 Mailman 自动转发器没有使用 Reply-To 邮件头,导致自动回复失败。
我们的改进也很简单,就是先对 reply-to 邮件头进行判断。有了这个改进后,自动回复器在复杂的环境中也可以使用了。
自动回复邮件内容取消自动折行
Mailman在发送自动回复器在回复的时候先对回复内容进行了处理,以70字符为界断行,结果显示效果不是很好看。这可能是历史原因造成的,可能当时的显示屏比较小,一行只能显示70字符,段行比较美观。但现在的显示屏比当时先进多了,而且大多数邮件都有自动换行显示的功能,这个就没必要了。修改也很简单,取消掉这个自动折行的函数即可。

群英汇 Mailman 人性化设计(5): 创建新列表
5月29日
创建新列表,在 Mailman 中是如何进行的呢?看看 Python 的邮件列表的新建页面。
- 输入列表名称,以及一系列列表的设置
- 在表单的最后,需要输入口令,即:List creator’s (authentication) password
即 Mailman 本身的创建列表的授权,是通过简单的密码检查完成的。这样的实现存在安全问题和管理问题:
- 密码认证在不安全的 http 信道内进行,存在密码泄漏风险
- 只有密码,没有用户名的不完整的认证。知道密码的可能有多个人,无法得知是谁完成的操作
- 密码管理,需要在命令行下执行 mmsitepass 命令重置管理员密码或者列表创建密码
群英汇扩展的Mailman解决这个问题,是通过双因子认证完成的。
阅读全部内容 »

群英汇 Mailman 人性化设计(4): 列表订阅策略
5月27日
Mailman 本身只包含三种订阅策略,有:确认, 要求核准 和 确认并核准。这三种订阅策略都要求用户手工输入自己的邮件地址,以及一个口令。例如:Python-idea 列表的订阅。
这样的邮件列表使用起来不方便,尤其对于企业用户可能有着下面的需求:
- 只允许使用公司内部的邮件地址订阅,不允许使用其它非企业邮箱订阅;
- 如果员工用外网邮箱订阅,会出现员工离职但是邮件通知仍然通过外网邮箱获取,导致信息泄漏;
- 企业都有相应的用户管理中心甚至认证中心,应该允许认证用户直接订阅,而不必手工输入邮件地址信息;
群英汇扩展了邮件列表系统的订阅策略,增加了两个新的订阅策略。

群英汇 Mailman 人性化设计(3): 列表订阅的人性化设计
5月17日
在邮件列表一览页面,当点击某个列表,将进入相应列表的首页。在 Mailman 本身的实现中,这个首页会包含该列表的订阅对话框(需要手动填写),还包含该列表的订阅编辑对话框。例如:Python-idea 列表的首页 。
而群英汇为每个列表的首页都加入的身份认证的判别。如果用户已经登录,则显示类似下面的界面:
- 如果列表已经订阅,会显示“用户已经订阅本列表”的信息
- 如果用户尚未订阅列表,会显示订阅对话框,不过对话框中的邮件地址信息已经自动填好。
- 在花名册查看对话框以及订阅编辑对话框等,不再显示口令输入等输入对话框,而是简化成一个按钮,因为认证已经完成或者认证会在点击对话框后开始。
另外一个主要的不同,订阅的策略的改进,增加了新的订阅策略,更加符合公司/团队的使用习惯。请听下回分解。

群英汇 Mailman 人性化设计(2): 管理员认证方式和管理员面板的变化
5月9日
Mailman 的管理员界面缺省并不进行认证(例如:Mailnan 项目本身的 admin 页面),这有点说不过去:
- 管理员界面中的创建新列表链接,需要口令认证
- 管理员界面中的其他链接,指向各个列表的配置界面,也需要口令认证
- 因为管理员界面不进行认证,因此非公开列表也不显示,管理员也成了瞎子…
在我们为 Mailman 增加了新的认证机制后,管理员界面必须登录才能访问,并能够显示列表概要信息。下面显示的是登录后的管理员面板:

群英汇 Mailman 人性化设计(1): 列表一览页增加登录和已订阅列表加亮
5月1日
群英汇为 Mailman 增加了独创的认证插件,从根本上改变了 Mailman 原有的基于简单 COOKIE 加口令的认证方式。为普通用户和管理员使用邮件列表提供了更为人性化的设计。
首先,我们介绍一下在 listinfo 页面,就是 列表一览 页面的改进。



最新评论