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

序章:

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服务器,我怎么发信呢?”

文章转载自 开源中国社区[https://www.oschina.net]

时间: 2024-11-03 22:04:16

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

致国内开源软件作者的一封信

很庆幸,我们居然没有在世界末日消失,希望开源软件作者能耐心的看完全文! 开源软件作者辛辛苦苦开发一个开源软件目的是什么呢?可能每个人目的都不太一样,但有一样是可以肯定的,希望越来越多的人使用,在使用的基础上帮忙改进,而使用的人数到了一定级别或许能产生某种商业价值. 关于开源软件和商业价值方面是个世界难题,尽管有成功的案例,但毕竟还是太少了,在这不予讨论. 那么我们就从开源软件作者的共同的.最基础的目标出发,也就是如何让越来越多的人使用这个开源软件的话题说起. 讨论之前先理清楚几个名词: 角色:

【翻译】如何选择一个开源软件许可证 Choosing an OSS license doesn’t need to be scary

本文禁止转载~ 选择一个开源软件许可证并不需要很可怕 下列哪一项最能描述你的情况? 我想简单和宽容 MIT许可证是一个许可证,就是短了点.它让人们做任何他们想与你的代码,只要他们提供归属回你和不承担你的责任. jQuery和Rails使用MIT许可. 也就是把源代码拷贝出去后他人可以做任何操作,也和作者没有关系 The MIT License (MIT) Copyright (c) [year] [fullname] Permission is hereby granted, free of c

大公司利用开源作品申请专利,谁伤了开源软件作者的心?

6月9日晚,社区内一名开源软件作者发出求救<知名公司(努比亚/中兴)拿我的开源软件( XXL-JOB)申请国家知识专利,我该怎么办?>,顿时引发热议.经多个平台(今日头条.知乎.微博.推特中文圈)等转发.传播. 圈内外人士一片哗然: 博主是否有炒作嫌疑?如何举证该软件为自己所有? 某公司对于此事件是否知情? 该通过什么样的途径解决问题,维护自己的利益? 好在,原作者从最初的开发到最终的修订都有迹可循 (项目地址) ,证实不是在炒作: 好在,一群热心的用户出谋献策,理性解决问题,对事不对人: 好

gtk+-在ubuntu下编译一个开源软件,./configure时出现错误,求指教

问题描述 在ubuntu下编译一个开源软件,./configure时出现错误,求指教 显示的错误: checking for libgnome-2.0 >= 2.0.0 libgnomeui-2.0 >= 2.0.0 gtk+-2.0 >= 2.4.0 gnome-vfs-2.0 >= 2.6.0 libglade-2.0 >= 2.3.6... Package libgnome-2.0 was not found in the pkg-config search path.

OpenDaylight技术指导委员会主席Colin Dixon:网络开源软件的发展

2016年6月1-2日,"2016全球SDNFV技术大会"在北京盛大召开.作为连续举办三届的SDN/NFV技术与产业盛会,本届大会着眼于SDN /NFV的实践应用与部署,从SDN/NFV在运营商网络.企业网.云数据中心.测试解决方案等多个场景的应用出发,深入解析产业部署现状及面临的挑战与发展趋势. OpenDaylight技术指导委员会主席 Colin Dixon 在主会场上,OpenDaylight技术指导委员会主席Colin Dixon先生做了主题为"网络开源软件的发展&

.NET 将推动开源软件的发展 justleon(原作)

NET 将推动开源软件的发展    justleon(原作)         在过去的时间里,基于Windows的开源软件物数量实在太少了.在网上查找一些开发相关的网站,内容也不外乎抄来抄去那几篇怎么做三角的Button啊,怎么做不规则的窗体啊,怎么把程序放到右下角的托盘中啊.当然不是Windows的程序员就是这种水平,当然也不是Windows程序员不团结,搞不出一个开源软件.      在Windows上的开源项目的阻力来源于:1.OS的封闭:MS做了太多的东东,束缚了程序员的创造力:3.开发

.NET将推动开源软件的发展

在过去的时间里,基于Windows的开源软件物数量实在太少了.在网上查找一些开发相关的网站,内容也不外乎抄来抄去那几篇怎么做三角的Button啊,怎么做不规则的窗体啊,怎么把程序放到右下角的托盘中啊.当然不是Windows的程序员就是这种水平,当然也不是Windows程序员不团结,搞不出一个开源软件. 在Windows上的开源项目的阻力来源于:1.OS的封闭:MS做了太多的东东,束缚了程序员的创造力:3.开发语言和工具太多太杂了,各种程序员之间无法顺利的交流.Linux方面天生没有这些桎梏,系统

开源软件发展的保障:分发协议

前不久,4月26日,是 世界知识产权日.知识产权日旨在促进人们树立尊重知识.崇尚科学和保护知识产权的意识,营造鼓励创新和保护知识产权的法律环境. 在4月28日,我们发布了来自BlenderCN社区罗聪翼的文章< 自由的成本--当开源遇上伪自主>,为大家介绍了国内两起涉嫌侵犯Blender分发协议,伤害开发者权益的事件,痛陈国内开源软件权利维护之路漫长且艰难.文章一经发出,迅速在微博上引起了一场关于维护开源软件权利的讨论,我们希望透过这一事件,引起大家对开源软件相关权利保护问题. 罗聪翼在文章最

谷歌安装6000个交互发光按钮:能由开源软件轻松控制

谷歌在纽约市的办公楼安装了一个由近6000个按钮组成的交互墙,它能够用亮灯的方式对多种模式和设计给予响应.但显然这6000个按钮并不只是简单的一个互动墙面,它还是谷歌另外一个开源软件-AnyPixel.js的引子.该软件代码已在GitHub上开放,它是一套专门为用户创建巨大交互显示屏而设计的一套系统,就像谷歌这个按钮发光墙. 谷歌创意实验室在博客上解释:"制作一个巨大的显示屏已经是一件非常容易的事情,另外,光为这个屏幕添加触屏功能也远还不够有趣.所以我们想要做出不一样的东西:6000个发光拱廊按