老韩
21六/100

Mailman2.1.9系统的一些BUG修复

1、邮件列表归档中文乱码问题。

  A.错误描述:如果客户端发送的邮件编码为GB2312编码,则当把邮件归档时,会出现信体为乱码的现象。

  B.问题分析:经过对邮件原文的分析,邮件本身没有问题,信头上也有编码信息,比如我发送的测试信信体为:

  1. ------=_NextPart_000_0180_01CB096D.0DEF1A50
  2. Content-Type: text/plain;
  3.     charset="gb2312"
  4. Content-Transfer-Encoding: base64
  5.  
  6. 1eLKx9K7t+K3otfUT3V0bG9va7XEsuLK1NPKvP6jrNPKvP6x4MLrzqqjukdCMjMxMg0KDQpUaGlz
  7. IGlzIGEgdGVzdCBtYWlsIHNlbmRlZCBieSBPVVRMT09LLCBhbmQgaXShr3MgZW5jb2RpbmcgYnkg
  8. R0IyMzEyLi4NCg0KIA0KDQpIYW5kYW9saWFuZw0KDQq6q7XAwcENCg0K
  9.  
  10. ------=_NextPart_000_0180_01CB096D.0DEF1A50

  经过对信体进行Base64解码,发现信体信息正常,编码正常。这就跟踪到问题可能出现在解码的模块。经过读代码发现,Mailman是调用pipermail进行解码的,据此跟踪到信体的解解码在HyperArch.py模块的Article类里完成。

  C.问题修正:在Article类里加入编码判断并进行转码:

  1. if body and charset != Utils.GetCharSet(self._lang):
  2.     # decode body
  3.     try:
  4.         #body = body.decode(charset)
  5.         if charset == 'gb2312':
  6.             body  =  body.decode(charset, 'ignore').encode(Utils.GetCharSet(self._lang))
  7.         else:
  8.             body = unicode(body, charset)
  9.     except (UnicodeError, LookupError):
  10.         body = None

2、邮件列表的List页面乱码问题

  A.问题描述:在Mailman2.1.9版本中,如果管理员后台设置了语言为中文,而系统又没有进行编码设置,那么Mailman邮件列表中文界面极有可能显示为乱码。

  B.问题分析:通过查看网页源代码发现,此时的编码为“us-ascii”,这是默认的编码。再检查模板,发现模板的编码都是UTF-8,此时编码是混淆的。

  C.修正:更改Default.py或者mm_cfg.py文件,把zh_CN编码改成:add_language('zh_CN', _('Chinese (China)'), 'utf-8')。

  3、脚本change_pw无法找到列表错误。

  A.错误描述:当邮件列表的名字有大小写字母时,会出现无法修改邮件列表的错误,例如:
当我在命令行下输入:./change_pw --listname=Mailman-dev-test --password=123456,此时可能出现:No such list "Mailman-dev-test"的错误。

  B.问题分析:这是因为没有把所有字母转成小写的缘故,邮件列表在本地都存储为小写。如果没有转换,则Mailman/MailList.py模块第616会抛出:Errors.MMUnknownListError错误:

  1. if not Utils.list_exists(self.internal_name()):
  2.     raise Errors.MMUnknownListError

  
  C. 修正:在change_pw脚本的openlist方法中,将传入的listname转成小写:

  1. listname = listname.lower().strip()

喜欢这个文章吗?

考虑订阅我们的RSS Feed吧!

评论 (0) 引用 (0)

还没有评论.


发表评论


还没有引用.