使用邮件客户端整合日常信息

1. 起缘

我是被逼出来的...

最开始, 我只是拿 txt2tags 写写文档, 在 Gmail 的 Web 界面看看 CPyUG 而已.

工作中的邮件我先是使用的 Thunderbird 来处理, 虽然我觉得它的搜索功能很难用, 但是收发功能正常也就算了. 后来不知道从什么时候开始, 这东西时不时会出现无法发信的问题, 就是报一个网络错误, 也没有其它信息. 我开始想是不是公司的邮件服务器有问题, 但是同事些都好好的, 哪怕同样是用 Thunderbird 的也没有问题. 我也把问题反映到 ES 那里, 他们对此也无解.

郁闷的是, Thunderbird 不能发信的时候, 我直接 telnet , 做完一个 SMTP 交互过程是没有任何问题的.

不能发信的问题有时非常影响工作, 没有办法, 我换了一个叫 claws-mail 的客户端. 发信是没有问题了, 但是它对邮件格式的富文本渲染好像很有问题. 而且它虽然可以让我使用 vim 来编写邮件, 但是因为有其它操作, 整个过程也感觉不是很顺畅.

没办法, 我开始考虑重新使用 mutt , 这个我曾经折腾过一阵放弃的东西. 与过去不同的是, 对于邮件, 现在我很熟悉. 这也使得我可以只关注使用 mutt 管理部分的功能, 收取与发送不使用它, 可能这样真给我少了很多麻烦.

下面我会挨着介绍相关的工具.

整套东西不是我一开始就想做成这样的, 而是逐渐地, 在有一个想法之后, 会发现, 唉, 我可以把另外一个工具整合进来. 为了舒服的目的, 就一直折腾过来了.

每部分介绍之后, 相关代码我会放到 gist 上, 它们只算是代码片段, 对我而言不算是项目, 只会随需随手修改, 很长一段时间内不会作为项目去统筹维护的.

题目虽然是说"邮件客户端", 但是其实邮件只是一种载体, 只是使用这种形式去处理你的信息, 与信息本身是不是邮件没有关系. 后面会示例说明这点.

2. 一个标记语言工具 txt2tags

标记语言工具, 可能大部分人对 markdown 会比较熟悉. 我当初也考虑过 markdown , 但是, 因为它原本没有对表格的支持, 所以我开始考虑其它的类似工具.

其实在考虑这类标记语言之前, 我很长一段时间在固执地尝试将 LaTeX 作为日常工具使用, 最后在找到一个使用 Lisp 写成的 LaTeX -> HTML 工具之后, 对于最重要的转换到 HTML 这部分功能算是能很好地控制了. 但是长期的折腾, 也使我意识到, 我平时需要写的东西, 真费不着扛上 LaTeX 这门超级大炮, 写起来比较累. 而它最大的优势, 各种科学记号与漂亮的纸质输出品质大部分时间我都用不着.

一个简单的工具, 能得到可控的 HTML 输出, 这就是我需要的. 我知道这类工具实现起来不难, 同时我更清楚, 肯定有人已经做过了, 只是我还没有找到. 于是, 后来单文件的 txt2tags 自然而然成了最合适的选择.

txt2tags 的官网在 http://txt2tags.org/ , 它源文件只有一个文件, 并且支持多种格式的输出.

放弃 LaTeX 选择 txt2tags 之后, 我很留恋那些漂亮的数学公式, 好在 MathJaxhttp://www.mathjax.org/ 这个项目真是超级牛 X , 而且整合也很容易.

这里先说一下, MathJax 是使用 js 处理公式的. 如果需要, 本地编译 txt2tags 时, 可以把这些 LaTeX 代码单独抽出来处理, 最后以图片代替结果, 以前我尝试过, 见http://zouyesheng.blogspot.com/2009/04/2.html .

最开始, 我为了得到我期望中的 HTML 格式, 开始修改 txt2tags 的代码.

因为之前的一些折腾经验, 以及为了适应邮件需要的一种预感, 我直接放弃外链 CSS 文件, 而是直接在源码中修改各种标签, 在里面嵌入 style 属性以控制格式.

刚开始的时候, 还是使用的 prettyprint 在页面中通过 js 做代码高亮. 我只是扩展了 txt2tags , 让它可以在源码中支持标记语言类型. 后来涉及邮件内容之后, js 实现高亮的方法就没法用了, 而且 prettyprint 的高亮效果也不是十分好看, 于是我尝试更大程度地修改 txt2tags 源码, 使用pygments 输出格式加工后的 HTML . 我达到了我的目的. 当然, 后来我还给我的 txt2tags 添加了对 gnuplot 代码的支持, 让其输出 svg 嵌入到 HTML 中. 这对我记录一些课程的笔记很有用.

代码:

3. 一个编辑器 vim

编辑器部分就不说太多了. vim 的作用, 主要是两个:

  • 在 mutt 中作为编辑器写内容.
  • 为 txt2tags 语法配置各种方便的键绑定.

当然, 也会使用 F2 编译 txt2tags , 然后使用 F3 在 firefox 中浏览结果.

代码:

4. 一个邮件客户端 mutt

使用 mutt 的原因开头说过了. 我只使用它管理邮件, 发送和收取我都使用自己做的工具完成, 这样做很有趣的.

其实 mutt 本身的配置内容并不多, 但我强烈建议打一个 patch , 让其可以支持边栏分类的显示.

mutt 配置好之后, 在指定目录创建需要的分类目录, 使用自己的工具收到邮件, 或其它信息时, 只要把对应的内容做成 RFC 822 的那种格式, 就叫 eml 格式吧, 直接往对应目录下的 new 目录一扔就可以了. 剩下的就可以交给 mutt 来处理了.

发送邮件也简单, 直接配置调用一个命令行工具, 剩下的全在工具里完成, mutt 也不需要做其它事.

这里另外要做的一件事, 就是对公司 Active Directory 中, 联系人的查询. 这个使用 Python 实现 LDAP 的交互也很容易.

代码:

5. 获取信息

这里我都说"获取信息", 没说"获取邮件"了. 最开始我是只想处理邮件的, 后来发现要处理其它需要交互的内容也不费什么事.

不同之处只在于, 获取邮件时, 是使用 POP 直接获取一封邮件内容, 放到目录下就完事. 而获取其它网站中的内容的话, 需要做"抓取"操作, 并且获取到的是 HTML 的文本, 还需要加工拼成一封信才能放入指定目录, 让 mutt 处理.

额外说一下, 这里需要使用邮件中的 Message-ID 这个头来做相关信息的传递. 这部分信息最重要的, 是在你回复这封信时, 知道原始来源, 这样后续你才能正确做出处理. 比如你从一个 Discuz论坛抓取了一条信息, 当你想回复它时, 你要知道是哪个论坛, 信息的 forum_id , thread_idpost_id是什么吧.

至于实现 POP 客户端部分, 使用 Tornado 也很容易做.

代码:

6. 发出信息

这部分是比较麻烦一些. 涉及邮件解析, 邮件拼装, 及 txt2tags 对各种格式的转换.

从流程上来说, 当 mutt 调用指定工具, 准备发信时, 我们的这个工具得到的是一封邮件, 及相应的投递信息. 但是如何处理这个信息, 却完全在我们工具的控制当中.

行为上来说, 我们决定是通过 SMTP 交互来发出一个邮件, 还是通过新浪微博的 SSO 授权登录到一个论坛, 通过一个 HTTP 的 POST 请求来发一个贴子.

内容上来说, 我们从邮件中解析得到的只是纯文本内容. 自然地, 可以是使用 vim 写出的 txt2tags 格式的纯文本内容. 那么, 如果是发出一封邮件, 我们可以把 txt2tags 编译成 HTML 格式的文本, 然后重新拼成 multipart/alternative 的邮件. 如果我们是准备发一个贴子, 我们把 txt2tags 编译成 bbcode 格式. 附件也可以类似处理, 或打包到邮件, 或上传到网盘什么的. 总之, 一切都可以在工具中完全控制.

代码:

时间: 2024-11-10 00:08:59

使用邮件客户端整合日常信息的相关文章

如何实现邮件服务的日常管理

实现邮件服务的日常管理 1.邮件客户端支持的邮件协议 * Outlook 2003 :MAPI,SMTP,P0P3,IMAP4,HTTP * Outlook Express :SMTP,POP3,IMAP4,NNTP * Outlook Web Access :HTTP SMTP协议:Simple Mail Transfer Protocol,通常用于把电子邮件从客户端传输到服务器,或从某一台服务器传输到另一台服务器 POP3协议:Post Office Protocol,是一种离线邮件协议,采

微软收购邮件客户端Acompli,价格超2亿美元

12月2日消息,微软周一宣布,该公司已经收购了手机邮件客户端Acompli,此举旨在增加其在这两个移动平台上的 应用数量.微软称:"这项收购交易是公司计划的一部分内容,旨在帮助人们利用其移动设备做到更多事情.今年我们已将Office带到了iPad和iPhone上,并在最近宣布把Office带到 Android平台上.我们提供跨越多个移动平台的最好生产力体验的相关工作已取得重大进展,未来将继续推进此事."Acompli则表示:"在产品上线后不久,我们开始与许多企业的IT部门合作

博客空白博文泄露微软疑似收购邮件客户端Acompli

摘要: 微软似乎已经收购了邮件客户端Acompli:近日,微软官方博客上一篇署名为微软副总裁Rajesh Jha的空白博文意外的泄露了这一信息. 这篇标题为空白博文请删除的博文,正文没什么内容, 微软似乎已经收购了邮件客户端Acompli:近日,微软官方博客上一篇署名为微软副总裁Rajesh Jha的空白博文意外的泄露了这一信息. 这篇标题为"空白博文请删除"的博文,正文没什么内容,像是测试文章,但博文底下的URL网页地址却深深出卖了微软,URL末端写着"microsoft-

微软疑似收购邮件客户端Acompli

摘要: 微软似乎已经收购了邮件客户端Acompli:近日,微软官方博客上一篇署名为微软副总裁Rajesh Jha的空白博文意外的泄露了这一信息. 这篇标题为空白博文请删除的博文,正文没什么内容, 微软似乎已经收购了邮件客户端Acompli:近日,微软官方博客上一篇署名为微软副总裁Rajesh Jha的空白博文意外的泄露了这一信息. 这篇标题为"空白博文请删除"的博文,正文没什么内容,像是测试文章,但博文底下的URL网页地址却深深出卖了微软,URL末端写着"microsoft-

Windows Phone7的UI设计:信息整合和信息展示

文章描述:Windows Phone UI前瞻:期望越大失望也越大. Windows Phone 7刚刚宣布了推迟在华上线的消息,跳票往往是用户最为反感的事.在正式上线之前,HT实验室带你预览一下Windows Phone 7的UI设计,看看是否与您期望的相同,先睹为快! "内容即界面"是Metro的设计原则之一,WP认为,直接.明了的信息才是好的用户体验,因此特意在页面弱化操作,突显信息展示.另外,WP7还深度涉入Facebook.twitter等平台,加强了信息整合.信息整合和信息

耗时很长的服务器端事件中让客户端得到中间过程信息的更合理的解决方案

耗时很长的服务器端事件中让客户端得到中间过程信息的更合理的解决方案 我认为<耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案>一文中的解决方案不合理,属于技术的误用,满篇的ajax这个词很容易给读者造成误导 . 原需求: B/S结构的系统里,用户点一个按钮系统开始发送上千封邮件,要求把发送信息(发送成功数,失败数,剩余数量...)动态实时的反馈给客户. 原文的技术误用之处: (1)ajax,pageload 这些ui层的东东渗透到逻辑层里去了 (2)thread的职责太多 并不是

Mac邮件客户端怎么设置

  Mac自带的邮件客户端怎么设置?很多Mac用户可能忽略了这一非常实用的Mac自带软件,对于部分需要经常收发电子邮件的Mac用户来说,系统自带的邮箱可以添加其他的邮箱,无需另外安装第三方的邮件APP,这样不用每次收发邮件都要打开网页了.今天小编就为大家带来Mac下邮件客户端的设置教程,具体的配置方法如下. 1.在Dock栏中找到"邮件",如果没有,则可以打开Finder,进入应用程序选项,打开"邮件"即可. 2.在桌面上方工具栏处点击"邮件"项

毕设是用VC++做的邮件客户端程序

问题描述 毕设是用VC++做的邮件客户端程序 发送邮件时总是smtp553的错误,接收邮件收不到文本信息,请大神指教啊 解决方案 邮件服务器出错了,是不是down了 解决方案二: 我现在也在做这个 前辈能指导一下吗 QQ407331191 感激不尽

Nylas Mail: 一个Linux的免费邮件客户端

有一个经常被提及的问题是 Ubuntu 是否还应该提供默认的电子邮件客户端.就个人而言,我已经很长时间没有使用 Thunderbird 了.我相信这不是一个第一次被问到的问题,但我相信这是一个把它解决掉的很好机会.这是因为日常用户倾向于使用基于网络的客户端,例如 Gmail 或 Outlook 来满足其邮件需求.而对于 Linux 上的经验丰富的用户而言,还有很多可供选择的选项.Geary.Empathy.Evolution 和 Thunderbird 本身已经为很多用户提供了很好的服务,但是我