阿里云大赛创意奖孟巍:邮件服务上的创新

  • 水羽哲

2012 年 12 月 12 日

话题:阿里巴巴语言 & 开发阿里云

孟巍凭借 OSS 本地文件和邮件服务获得了在阿里云开发者大赛的最佳创意奖,作品采用 Delphi 开发,灵感来源于日常工作的需求,InfoQ 就相关技术细节对他进行了采访。

InfoQ:首先请您做下自我介绍并介绍本次的参赛作品 OSS 本地文件和邮件服务?

孟巍:我在初中的时候开始接触编程并从那时开始深深迷上了这个行业,高中参加 NOI 竞赛有幸被保送到中山大学计算机系,2004 年本科毕业后先后加入了电信、软件、手机互联网企业从事软件开发和管理工作,2012 年初我在广州开始创业,成立了一家软件公司,目前主要负责医疗信息化和云计算方面的系统设计和技术选型工作。本次参赛的作品(OSS 本地文件和邮件服务)其实是为了解决我身边的一些非技术型创业者所面临的初创型公司内部 IT 管理的实际问题,将阿里云 OSS 服务作为公司内部文档和企业邮件的永久存储介质。本地文件服务为阿里云 OSS 提供了 FTP 和 Windows 虚拟盘的接口,简化用户的文件操作;本地邮件服务可以为企业架设自己的企业邮箱,实现了 POP3 和 SMTP 协议以及多用户管理,将企业邮件永久保存在阿里云 OSS。

InfoQ:你使用 Delphi 语言进行开发,能够说下选择 Delphi 是基于哪些考虑?在开发过程中是否遇到一些问题?

孟巍:Delphi 是我比较熟悉的一种编程语言,我相信有很多开发人员都有 Delphi 的编程经验,只是随着技术的飞速发展,现在 Delphi 不像原来那么大众化了,大家可能都转向了 Java、C# 等其他广泛使用的编程语言。我使用 Delphi 的另外一个原因就是它全面提供了我参赛的作品所需要的基础控件,具体来说是 Indy 的一系列控件,包括 TIdHttp,TIdFtpServer,TIdPOP3Server,TIdSMTPServer,TIdSMTPRelay 等等,使用这些控件可以弱化协议的细节,将关注点放在界面实现、应用逻辑和与 OSS 的互操作上,提高开发效率。提到界面,我想说说 Delphi XE3 里面的 Fire Monkey 技术,我的理解是它基本上完全重写了 VCL 的 GUI 控件库,支持跨平台,还允许开发人员开发 Windows 8 界面的应用程序,大家有兴趣的话可以试试看。我在开发过程中曾遇到一个细节的技术问题,因为官方没有提供现成的 Delphi SDK,所以我需要从 SDK 开始做起,在编写和测试 SDK 的时候发现 TIdHTTP 的 CustomHeaders 里面的值不支持非 ASCII 编码的字符串,刚好在 OSS 的 API 中关于 Copy Object 需要在“x-oss-copy-source”这个 header 中存放源 object 的名字,如果这个名字包含非 ASCII 编码的字符(比如中文的 UTF8 表示),则会被 TIdHTTP 强制转换为问号(?)。我一度认为这是 Indy 控件的 bug,但后来我仔细查阅了 HTTP 的 RFC 2616 规范,发现是阿里云 OSS 与 RFC 规范关于 header 取值的编码要求不一致,我已经将此问题报告给阿里云的技术人员,正在等待进一步确认。我个人觉得,综合来说,使用 Delphi 来开发 Windows 原生应用程序仍是一个不错的选择。

InfoQ: 你对阿里云的 OSS 做了一次封装,让其支持 POP3 和 SMTP 协议,现在是否是完全兼容?在封装的实现中,你有哪些经验和教训可以分享给大家?

孟巍:通过使用不同的客户端测试,有关 POP3 和 SMTP 协议的实现是可以兼容的,但是由于参赛准备时间有限还没有进行过大范围测试。在动手实现这两个协议之前,我首先在技术层面了解清楚了电子邮件收发的全过程,具体包括:POP3 和 SMTP 协议分别是做什么的、每个协议里面有哪些消息、每个消息的参数是什么、返回码有哪些、两个邮件服务器之间是如何通信的、邮件内容该如何存储、什么是 MIME、IMAP4 协议有什么优势等相关问题。在这个过程中我有一个很深的感悟,那就是我发觉我们平时用的很多习以为常的技术方案的背后其实都有一份严谨的规范定义,如果要深入了解问题的实质就必须从这些规范入手,比如上面这些问题可以从 RFC 821、1939、2045-2049、3501 等规范中找到答案。

InfoQ:如果公司使用这个服务,如何将历史邮件迁移过来?并且在安全性上是如何做保证的?

孟巍:历史邮件的迁移目前还没有实现,我计划额外提供一个工具来批量导出原邮件服务器的邮件再批量导入到 OSS 邮件服务中去。关于安全性方面,首先企业用户需要自己去申请阿里云 OSS 的 Secret ID 和 Secret Key,企业用户的所有邮件都存储在自己账号所创建的私有 bucket 中,所以每个企业的邮件系统之间是彼此隔离开的,邮件内容存储的安全性和完整性则交由阿里云 OSS 来实现。另外,下一步我计划添加邮件加密功能,即企业用户可以独立设置一个密钥,所有的邮件内容必须经过 256 位加密后才存储在阿里云 OSS 上,这样可以进一步保证企业邮箱的安全性。

InfoQ:在开发的过程中,你用到了阿里云的哪些服务?请列举这些服务的优点和需要改进的地方?

孟巍:本次开发我使用了阿里云 OSS 和 ECS 服务,前者提供企业邮件的存储介质,后者提供了部署的服务器。ECS 和 OSS 之间采用内网连接,对于大附件的邮件也不会出现因为网络不稳定而导致的存储失败的问题;使用这两种服务的另一个好处就是在阿里云的价格表里面从 OSS 到 ECS 的流量是不计费的,这样就可以进一步减轻初创企业的 IT 开销。OSS 服务非常强大、高效和完整,但是个人觉得在一些技术细节上还有待雕琢,比如上述的 header 编码问题,以及最近论坛里面提到的事务性操作问题,都还需要逐步地完善。ECS 服务的配置和使用都很容易,还有免费数据迁移、免费备案、云盾、LBS 等配套服务,可以看出这些服务都是为了解决站长的实际问题而推出的,非常贴心。

InfoQ:请你分享一下获奖的感受?

孟巍:本次参赛我的最大收获是,其实创意和创新每天都会时不时地冒出来,但是无论多小的创新,只要能够解决一个实际问题,就是有价值的,如果还能够把这个创新继续延续下去,成为产品,就能够帮助更多的遇到相同问题的人。我本次参赛的起源是看到朋友的公司 IT 资源有限,却又非常需要可靠的文档和邮件存储服务,这个问题一直无法得到彻底解决,毕竟对于一家公司来说,这两者有任何的数据丢失都是非常大的损失。通过思考我发现了阿里云 OSS 正是解决这个问题的最佳答案,只是还缺少中间层的适配工具,将文档和邮件变成 OSS 的 object 来实现永久存储。恰好我有能力制作这样的工具,我想,如果我能实现这样的工具帮助我的朋友,也应该同样能帮助到类似的初创公司。阿里云给予我这个奖项,我觉得充分肯定了我的这个思路和前期的尝试。我想,这次的经历会激励我在今后做更多的有实质需求的创新探索。

InfoQ: OSS 本地文件和邮件服务下一步的发展计划是什么?

孟巍:接下来我会继续开源和完善 OSS 本地文件服务、OSS 邮件服务,以及 OSS Delphi SDK,制作相关的帮助文档和操作视频,收集用户的修改意见和新需求。希望我开发的这两个小工具可以帮助更多的初创企业更便捷地使用阿里云 OSS 服务。同时我将继续深入挖掘企业 IT 管理和阿里云服务的契合点,在此基础上开发更多的实用型工具。

阿里巴巴语言 & 开发阿里云