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 中. 这对我记录一些课程的笔记很有用.

代码:

  • 我修改过的 txt2tags https://gist.github.com/AceFantasy/7870470

3. 一个编辑器 vim

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

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

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

代码:

  • vim 相关的配置文件https://gist.github.com/AceFantasy/9c2d4fe00f5addfc5724

4. 一个邮件客户端 mutt

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

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

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

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

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

代码:

  • mutt 配置文件 https://gist.github.com/AceFantasy/7870763
  • LDAP 查询 https://gist.github.com/AceFantasy/7870791

5. 获取信息

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

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

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

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

代码:

  • 获取信息文件, 包括抓取 Discuz https://gist.github.com/AceFantasy/7870934
  • Tornado 实现的简单 POP 客户端https://gist.github.com/AceFantasy/7870960

6. 发出信息

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

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

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

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

代码:

  • 发出信息的工具 https://gist.github.com/AceFantasy/7871237
  • Tornado 实现的 SMTP 客户端 https://gist.github.com/AceFantasy/7871107
  • 邮件解析 https://gist.github.com/AceFantasy/7871128
  • 邮件内容过滤 https://gist.github.com/AceFantasy/7871161
  • 新浪的 SSO 登录 和 Discuz 发贴 https://gist.github.com/AceFantasy/7871187

使用邮件客户端整合日常信息相关推荐

  1. SpringBoot整合定时任务和邮件发送(邮箱 信息轰炸 整蛊)

    SpringBoot整合定时任务和邮件发送(邮箱 信息轰炸 整蛊) 目录 SpringBoot整合定时任务和邮件发送(邮箱 信息轰炸 整蛊) 1.概述 2.最佳实践 2.1创建项目引入依赖(mail) ...

  2. linux浏览器,邮件客户端,输入法,双屏设置,应用软件,gnome-screenshot/scrot -s截图,office...

    搜狗输入法linux版:http://pinyin.sogou.com/linux/help.php win/linux同时支持比较好用的浏览器:maxthon,firefox,maxthon,ope ...

  3. 如何在 Mutt 邮件客户端中使用密文密码

    如何在 Mutt 邮件客户端中使用密文密码 Mutt 是一个 Linux/UNIX 终端环境下的开源的邮件客户端.Mutt 以及 Alpine 在 Linux 命令行爱好者中有着最忠诚的追随者,这不是 ...

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

    需求:B/S结构的系统里,用户点一个按钮系统开始发送上千封邮件,要求把发送信息(发送成功数,失败数,剩余数量...)动态实时的反馈给客户. 分析和实施过程当中遇到的问题: 一:最低级的问题 由于客户催 ...

  5. C#获取邮件客户端保存的邮箱密码

    有时候邮件客户端记录了邮箱密码,但自己却忘记了,此时可以使用C#建立一个临时的"邮件服务器",截取密码: IPEndPoint ipEndPoint = new IPEndPoin ...

  6. Ubuntu终端(terminal)及Thunderbird邮件客户端常用的快捷键

    Ubuntu终端常用的快捷键 Ubuntu中的许多操作在终端(Terminal)中十分的快捷,记住一些快捷键的操作更得心应手.在Ubuntu中打开终端的快捷键是Ctrl+Alt+T.其他的一些常用的快 ...

  7. mail linux 客户端,Nylas Mail: 一个 Linux 的免费邮件客户端

    Nylas Mail An Amazing Free Email Client For Linux 有一个经常被提及的问题是 Ubuntu 是否还应该提供默认的电子邮件客户端.就个人而言,我已经很长时 ...

  8. 速更新!流行的开源邮件客户端 Mozilla Thunderbird 91.3修复多个高危缺陷

     聚焦源代码安全,网罗国内外最新资讯! 编译:代码卫士 Mozilla 发布 Thunderbird 91.3 修复多个高危漏洞,它们可引发拒绝服务.来源欺骗.安全策略绕过和任意代码执行后果.攻击者只 ...

  9. james邮件服务器的用户信息添加

    通过我的上一篇博客http://blog.csdn.net/luosheng1125/article/details/9162877我们了解了james邮件服务器的安装,启动和配置,但是要想真正的使用 ...

  10. 配置Exchange Server 2010多种邮件客户端收发电子邮件

    平时在工作中大家都知道除了常用OWA和Outlook来收发邮件之外,还会使用到Foxmail.Outlook Express和Windows Live Mail等等邮件客户端软件来收发电子邮件.下面介 ...

最新文章

  1. 组策略轻松实现软件发布,Active Directory系列之二十二
  2. CBM--组件化业务模型简介
  3. linux:配置jdk环境变量
  4. 计算机量子化学计算实验报告物化实验,experimental report:量子化学计算(HMO).pdf...
  5. mysql 配置分区_Mysql的分区配置实验
  6. 2021-05-10 矩阵AB和矩阵BA有什么联系?
  7. Dalvik内存管理
  8. ~~筛法求欧拉函数(附模板题)
  9. 【Linux开发】如何查看Linux kernel的内置模块驱动列表和进程ID
  10. FastDFS+Nginx部署详细教程
  11. 计算机网络与通信pdf谢希仁_考情分析|2020年同济大学计算机考研考情分析
  12. 算法设计与分析(第2版)屈婉玲 刘田 张立昂 王捍贫编著 第三章课后习题答案
  13. 今日download工程的奇怪问题error C2039: 'readStdErr' : is not a member of 'Programer',
  14. 什么是敏捷开发?它有什么特点
  15. AndroidStudio 3.4更新了啥?
  16. C++代码审阅--ice104协议从站(1)
  17. FPGA下载(kintex-7)
  18. win10计算机错误代码,win10电脑更新失败提示错误代码0x80070424修复方法
  19. oracle 创建新的表空间,oracle创建表空间新建新用户并受权
  20. 深度学习图像数据库总结(收藏用)

热门文章

  1. matlab没有曲线,有个程序,运行后只有坐标没有曲线,是怎么回事呢 望大神们解答...
  2. json为java对象配置一个函数_Java基础/利用fastjson反序列化json为对象和对象数组...
  3. 交朋友游戏C语言,幼儿园小班社会教案《我会交朋友》游戏活动
  4. java treeset 降序,Java TreeSet,Collections使用
  5. 程序员进入BAT,到底是“好事”还是“坏事”?
  6. [python]练习之判断3个数值中最大值
  7. 双11当天,淘宝搜索如何让CPU使用率降45%,GMV提1% | 论文
  8. 解方程求PH值,POJ(2006)
  9. 全媒体平台可以适度超前
  10. 西班牙夺得欧洲杯给IT业的十条启示