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

简介:

序章:

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服务器参数的 模板。并把用户输入的配置参数简化为只需要输入一个邮箱地址,我们会自动推测其对应的配置参数。

image

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

image

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

风云变幻,问题再出

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

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

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

跳出圈外解决问题

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

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

image

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

image

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

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

相关文章
|
4月前
电子好书发您分享《阿里工程师的自我修养》
电子好书发您分享《阿里工程师的自我修养》
30 1
|
9月前
|
供应链 安全 大数据
叮~OpenSCA社区拍了拍您并发来一份开源盛会邀请函
8月10日,2023数字供应链安全大会将在北京隆重举行,我们在国家会议中心等你呦~ (报名参会方式请见文末)
44 0
叮~OpenSCA社区拍了拍您并发来一份开源盛会邀请函
|
开发者
2023致开发者的一封信
简要讲述一下随着阿里云社区一路一来的收获,以及对新年的希望
2023致开发者的一封信
|
监控 前端开发 jenkins
新来个技术总监,给团队引入了这款开发神器,同事直呼哇塞
带团队时间久了,就能发现整个 Team 都渐渐疲了。前两年老板还专门买了个系统搞 OKR,现在也不大提了;Scrum 我们也搞了,用起来也就那样;项目管理工具试了好几个,禅道、Worktile、现在用 Coding,反正有一个能用的就行;微服务化改造从去年开始在吭哧吭哧搞,我们自己搞得觉得很厉害,但业务部门那边就觉得没啥差别,搞不懂你们研发部门每天在弄些什么,赶紧做我们提的需求要紧。
新来个技术总监,给团队引入了这款开发神器,同事直呼哇塞
|
开发工具 开发者 iOS开发
苹果热门开源项目首席维护者怒了:GitHub 封停俄罗斯开发者账户,贡献痕迹惨遭删除
近日,苹果热门开源项目的首席维护者撰文控诉,GitHub 粗暴封停俄罗斯开发者账户,但并没有考虑到后续带来的后果,对涉及封停账户的开源项目带来了“毁灭性”的影响。好在最新的情况是,GitHub 已对此做出了回应与部分修正。
128 0
崮德好文连载 - 时间&事项管理工具
有很多同事问我,崮徳,你每天都有这么多想法,还要工作,学习英语,看书,大脑怎么够用,时间怎么够?我觉得吧,这个要看方法,而不是靠人定胜天。比如,我之前提到的日程管理,事项管理等帮忙记忆细节的小工具,可以把大脑从记忆琐碎的细节中释放出来,那么清空大脑后,大脑的效率会大大提高。
|
程序员 开发者
叮!一份顶级开源项目的邀请函,请查收~
风陵渡口初相遇,不入闲鱼误终身~
1961 0
|
安全 Windows
Zlob黑客留言将结束行动 微软称对此很感动
引起微软对你的注意力的一个方法就是在你刚刚编写的恶意木马程序中加入一个简短的信息。一个没有透露姓名的俄罗斯黑客最近就是这样做的。 这个黑客编写了一个恶意木马程序Win32/Zlob的变体。受害者将在引诱之下把这个恶意程序安装到自己的计算机中。
698 0
|
人工智能 程序员 区块链
【云周刊】第181期:疫苗事件发生后,阿里工程师连夜做了件小事
疫苗事件发生后,阿里工程师连夜做了件小事,基于 TensorFlow 、OpenCV 和 Docker 的实时视频目标检测,阿里安全猎户座实验室首创的“自动逆向机器人”,了解一下? ..更多精彩内容,尽在云周刊!
4621 0