开发插件解决 Claws Mail 看不到 Extmail 发来邮件内容的问题

2012/04/25 | 21:30 | 分类:Web与互联网 | 标签: | 1,812次阅读

  前文所说的这个问题,理应在 Extmail 服务端解决,然而我向 Extmail 开发者发信,尚未得到回复。尔后委托 Jeoygin 同学修改代码,却得知 Extmail 在这块的设计逻辑有些混乱,并不是改一两行代码就能搞掂的,有一些纠结的逻辑必须重构。考虑到这是实验室的生产环境,加之受影响的只有我等另类用户,就不在服务器上折腾了。
  退而求其次,在客户端解决吧。要么让 Claws Mail 在解析邮件时忽略非标准的头部,要么在收到邮件之后将其修改正确再解析。Claws Mail 的功能丰富,但遍历各个功能,没有发现能够直接解决这类问题的选项。虽然可以通过 Action 或 Run command 机制调用外部脚本修改邮件文件,但实验发现总有一些小问题:或是需要额外的鼠标操作,或是不能及时刷新。于是决定发挥主观能动性,自己写个 Claws Mail 插件。我仿照官方提供的插件示例,实现了一个 ExtMailHeaderFixer。思路很简单,添加一个处理接收到的邮件的钩子函数,当收到 Extmail 发来的带有 multipart 和 base64 头的邮件时,将 Content-Transfer-Encoding: base64 修改为 X-ExtMail-Header-Encoding: base64 即可。之所以不在解析时处理,而要修改邮件,是因为实验发现 Claws Mail 确实可以解析符合 Content-Transfer-Encoding: base64 语义的 multipart 邮件(即将 multipart 整体进行 base64 编码),不仅如此,Claws Mail 还能解析不同格式多级内联的邮件,我不想失去这个挺酷的特性。之所以不删除 Content-Transfer-Encoding: base64 这一行,或者把 base64 修改成合法的 8bit,而把这一行修改成对客户端无影响的 MIME 扩展字段,是便于必要时快速恢复邮件原样。这个方案也有缺点,即相关的钩子函数只对 POP3 邮件有效,对 IMAP 邮件无效,Claws Mail 这样设计可能与两个协议的语义差别(接收或同步)有关。在我目前的使用场景中,这个问题不大。
  在 32 位 Ubuntu 12.04+Claws Mail 3.8.0 和 64 位 Debian wheezy+Claws Mail 3.8.0 下测试通过。把代码释放出来,放在 sf.net(万古不化……),按传染性要求以 GPLv3 授权,方便遇到相同问题的朋友使用:http://sourceforge.net/projects/extmailhf/

发表您的评论

您的名字: (必填)

您的邮箱: (不会被公布,必填)

您的网站:

声明:本blog默认为评论人对评论内容拥有版权并承担相关法律责任。评论人授权blog作者对评论进行引用、存档或以其他方式合理使用。Blog作者保护评论内容的完整性,但有权在不通知评论人的前提下删除评论。