一个开源软件作者和邮件通知奋斗的血泪史

序章:

9月18日,禅道发布了7.3版本,这是禅道五年内发布的第65个开源版本,也是我们和邮件通知斗争五年的“血泪史”。这个版本我们最终集成了一个大招,来彻底解决邮件通知的问题。先卖个关子,后面详细讲我们的大招是啥。

背景:

禅道(http:/www.zentao.net)是我们团队开发的一款开源项目管理软件,主要定位是研发项目管理。面向的用户群体主要是研发团队,部署场景主要是企业内部的私有服务器。这是我们这个故事的大背景。然后悲惨的故事就开始了。

打不死的小强:Email

禅道软件在使用过程中的一个需求是需要将软件里面的各种动态消息通知到相关的人员。解决这个问题可以有很多种手段:客户端软件的提醒,QQ的提醒, 微信的提醒,短信的提醒,邮件的提醒,浏览器的桌面提醒等等。每种手段都有各自的优劣,然后我们与之奋斗了五年之久的邮件就粉墨登场了。在上述的各种通知 手段中,以邮件通知最为广泛,和用户的使用习惯契合度也最为密切。说到这儿,也许有的朋友说,我们团队邮件早都不用了。其实我们还是低估了邮件顽强的生命 力。邮件系统作为自互联网初期就存在的基础服务系统,有着广泛的用户基础。一直有各种各样的协同软件试图干掉邮件,但很遗憾的是,到现在还没有成功的案 例。

天真的想法:程序员应该搞得定smtp

故事的背景之一就是禅道主要的用户是研发团队,所以我们在最开始的时候天真的以为配置一个smtp发信服务器对于做软件研发的人来讲,应当是很简单的事情。

所以我们最开始的版本是提供了基于文件的配置参数,用户需要自己设置下smtp服务器的地址,端口,是否需要登录,如果登录还需要设置用户名,密码等参数。

$config->mail->fromAddress = ‘‘;            // The from address.
$config->mail->fromName    = ‘‘;            // The from name.
$config->mail->mta         = ‘smtp‘;        // The send mail type.
$config->mail->smtp->debug    = 0;          // Debug level, 0,1,2.
$config->mail->smtp->charset  = ‘utf-8‘;    // Charset
$config->mail->smtp->auth     = true;       // Need auth or not. true|false
$config->mail->smtp->host     = ‘localhost‘;// The smtp server host address.
$config->mail->smtp->port     = ‘25‘;       // The smtp server host port.
$config->mail->smtp->secure   = ‘‘;         // The type to encode datas, ‘ssl‘ or ‘tls‘ allowed
$config->mail->smtp->username = ‘‘;         // The smtp user, may be a full email adress.
$config->mail->smtp->password = ‘‘;         // The smtp user‘s password.

结果就是我们很快就发现我们实在是太天真了。太多的用户搞不懂什么是smtp服务器,什么是端口,什么是加密,什么是不加密,必须想其他的办法。

整理名片的意外收获

有一次我在整理名片的时候,观察了下名片中所留的邮箱,发现无外乎分为两种:公共邮箱和私有域名后缀的邮箱。公共邮箱比如gmail,qq邮箱等。 私有域名的邮箱又分为两种启动,自建邮件服务和使用第三方的企业邮箱服务。这样分类下来,自建邮件服务的企业其实只占很少的比例。于是就有了我们进一步的 解决方案:通过模板来把80%左右的配置问题解决掉。我们整理了腾讯邮箱,163,263,gmail,新浪等国内常见的邮件服务商smtp服务器参数的 模板。并把用户输入的配置参数简化为只需要输入一个邮箱地址,我们会自动推测其对应的配置参数。

我们会尝试查找该域名对应的mx解析记录,然后得出它背后使用的服务商,然后再根据相应的模板来设置参数。

到了这一步,对于大多数用户来讲,可以把邮箱的配置简化为只需要输入一个发信的地址,然后再输入下密码就可以了。终于我们清净了好长一段时间。

风云变幻,问题再出

解决了配置参数的问题,实际使用过程中的问题开始突出了。这些问题从分类来讲可以分为以下四大类:

  1. 内部环境限制问题:比如无法做域名解析,php环境缺少ssl支持,安全级别过高等等。
  2. 第三方邮件服务商额外增加了很多限制,比如smtp服务默认关闭,开启需要验证码等等。
  3. 发信速度慢导致影响操作体验的问题。我们尝试提供了异步发信功能,这是另外一个大坑了。
  4. 邮件达到率的问题:现在禅道,zentao已经成了敏感词,直接被干掉的几率很大。

这时候我们注意到了sendcloud的邮件通知服务,大招开始酝酿。

跳出圈外解决问题

sendcloud是一家专门提供邮件发送服务的厂商,我想应该有很多厂商在使用他们的服务了。禅道的saas服务也采用了sendcloud来发 送邮件,效果还是杠杠的,速度快,达到率高。出于防垃圾邮件的考虑,sendcloud的邮件服务还需要很多的设置,我想用过的朋友应该都有体会。这些设 置还是有一定的挑战的。直接向我们的用户推荐并不合适。sendcloud的邮件发送服务主要是面向的公网用户,所以他们对防垃圾邮件的要求会比较高。但 如果具体到一个企业内部管理的场景来讲,这些限制就可以忽略了。

于是我尝试和sendcloud的同学发了一封邮件,解释了下我们的应用场景和诉求,咨询他们有没有可能做一种专门面向企业内部应用场景的通知服 务。不需要其他的各种配置,用户只需要开通服务,设置发信的白名单,然后拿到一个id和私钥,然后通过http接口就可以发信了。很开心地是 sendcloud的同学们很快就给了回应,很快他们的notice.sendcloud.net服务就推出来了。我们也很快地将这个服务集成到了禅道里面。于是就有文章开头所说的大招:

发信的时候可以选择是smtp发信还是sendcloud发信。

故事讲到了今天,终于可以告一段落了。但故事不会结束,和邮件的斗争仍然会继续,明天的故事,明天再继续讲吧。而且我相信,随着计算机的迅速发展,以及随之而来的系统越来越复杂,以及随之而来的用户的动手能力越来越差。故事会越来越精彩,精彩程度肯定会超过“我的机器ping不通smtp服务器,我怎么发信呢?”

时间: 2024-11-03 21:44:04

一个开源软件作者和邮件通知奋斗的血泪史的相关文章

维护一个开源软件的喜悦与汗水

第一节 我在2015年4月份开始做这个开源软件之前, 已经研究了很长一段时间的浏览器开发技术了 那个时候我还只是打算为博客园写个文章发布工具而已, 觉得技术上可行, 也能为常年写博客的人乃至博客平台提供一些帮助 于是就动手做了 做了之后,发布出来,一直自己用, 也没管别人的想法, 那个时候,工作和生活上的事情非常多,也实在抽不出精力来仔细维护这个软件 在各个平台下,各种不同的博客设置下,BUG很多: 很多人找我问这个软件的事情 我也是能推脱的就推掉了. 后来断断续续更新过几个版本. 直到今年1月

行业牛人和开源软件改变技术世界

Google在很长一段时间里都是技术圈内的顶尖技术的代名词.外界也不清楚Google是怎么完成一些不可能完成的任务的.当年,大家光是想象Google怎么保存那些海量的索引,是怎么做到的都不知道.所以大家想象Google里面每个工程师都是百年一遇的大神吧. 直到后来,Jeff Dean的三篇论文Google File System,MapReduce和BigTable一发布,大家才注意到,原来Google有个Systems and Infrastructure Group,有个Jeff Dean大

开源软件测评方法及工具

一.开源史上最成功的八个开源软件 就开源本身而言,它就是个成功案例.它不仅受个人喜欢,而且众多知名企业也青睐于它.虽然开源计划和开源产品数不胜数,但哪一个才是最成功的呢?这里所说的"成功"的定义是:应用广泛+众所周知.而在众多成功的开源产品中,只有少数领头羊,而其他产品基本只能望其项背. Linux 上榜理由:Linux + GNU = GNU/Linux .从Linus Torvalds在1991年宣布他在Minix基础上创建一新OS内核到现在已经接近20年了.在这段时间内,大部分网

海哥:开源能够作者带来什么(二),北京源创会归来

2014年11月23日我去参加了开源中国举行的OSC北京源创会,回来后,有几个感悟,希望能分享出来,写的是自己的感悟,程序员干脆利落,没有过多的形容词,各位老鸟同学,不爽的,转头扔轻点. 源创会开始时,由开源中国CEO老马在台上给大家分享了开源发展历程和开源中国的一些经历和感悟,之后嘉(屌)宾(丝)提问,记得有位同学是这么说的"开源中国一直在做一些开源的,回馈于开发者的事情,怎么盈利?",是的,我自己一路见证了oschina的发展,由一个收集开源软件的个人网站,发展到公司运营,之后推出

开源软件的三种商业模式

开源软件一般都会有良好的社区,而且采用分布式的软件工程体系,这一体系已经相当完善而且在不断更新.持续运行之中.大部分开源项目是基于开放理念的无私贡献,但很多开源项目进行商业运作,也获得了巨大的成功. 开源软件的商业模式,个人总结目前主要可以分为三类: 1.完全开源,通过基金会运作,资金主要来源于捐款. 这一类的开源组织规模大的实质上已经形成一个联盟,共同把持技术界的话语权和主导地位.如Apache和Linux.Linaro,都是IBM.Oracle.Microsoft等大公司在背后支持.华为每年

开源软件--软件业的标准件

题记:这是一篇旧文,最早写于2012年,当时只是在公司内部发表,与同事讨论了下.现在与大家分享. 开源软件之我见 2012-11-20 开源软件,是促进软件行业发展的一个重要组织,对于开源软件,我是这样认识的. 为了更好的表达,我来引入一个名词:标准件. 对于这个名词,机械行业的人员非常的熟悉,因为机械领域有非常多的标准件.下面我们看下机械标准件的定义: 标准件是指结构.尺寸.画法.标记等各个方面已经完全标准化,并由专业厂生产的常用的零(部)件,如螺纹件.键.销.滚动轴承等等. 广义包括标准化的

主要介绍当前主流的激光雷达数据处理库、开源软件、商业软件等

1.主要介绍当前主流的激光雷达数据处理库.开源软件.商业软件等. 英文主页: http://opentopo.sdsc.edu/tools/listTools 2.日期 工具名称 工具类型 关键词 评分 2017年1月12日 planlauf /地形 说明: planlauf / TERRAIN是Windows 7/8/10易于使用的应用程序,可视化数字高程模型.它使用游戏行业的最先进的技术,如"网格抽取","正常映射"和"细节水平",以显着减小

Powershell 邮件通知计划任务运行失败

因为Win 2008 R2服务器上面有很多计划任务,邮件通知如果任务运行失败.因为任务运行失败会有不同的Event ID生成是日志里面,所以,如果有不同的Event ID,应该再做一个计划任务. 新建一个计划任务,类型如下,并设置做以下三个配置. 选择Run whether user is logged on or not. Triggers配置如下图. Action 配置如下. Program script C:\Windows\System32\WindowsPowerShell\v1.0\

邮件安全防护之反垃圾邮件开源软件ASSP

一 .概述 Assp 全称 anti-spam smtp proxy (反垃圾邮件 smtp 代理),是用 perl 语言开发的一款发垃圾邮件的 smtp 网关,并可结合开源的 clamav( 邮件防病毒软件 ) 使用.目前其开源项目都存放在开源平台 sourceforge 上面,并持续更新. Assp 目前主要分 1.x 和 2.x 版本.使用较多的是 1.x 版本, 2.x 是作者推荐的,目前使用教程比较少,不过如果熟悉了 1.x 版本那么对2.x 也会很容易上手的, 1.x 和 2.x 的