知乎的邮件系统为什么不再用 Amazon SES 了?

  知乎现在的邮件主要分两大类:通知邮件和周刊邮件。通知邮件是线上用户行为实时产生的,周刊邮件则是离线程序生成的。最开始的时候我们的通知邮件是用的 Postmark [1] 发送(Postmark 不支持发送 EDM 邮件),周刊邮件则是用的 Amazon SES [2] 发送。除开 Postmark 价格($15/万封)比较贵外,使用了很长一段时间并未遇到太大问题,我们对两家的服务也还算满意 [3]。在这里我特别要感谢 Amazon 的 Ryan Huang [4] 在我们使用 SES 过程中提供的极大帮助和支持。

 

但从2011年底开始我们逐渐意识到这两家服务对于我们日渐增长的需求之间存在一些短期内难以解决的技术问题:

  • 没有独享 IP 地址:Postmark 和 SES 都是共享 IP 地址的邮件发送服务。理论上我们发出的邮件和其他人发出的邮件会来自同一个地址,而我们无法保证另外的人不是垃圾邮件,从而导致共享的 IP 地址资源的 reputation 降低,影响我们的邮件送达。实际上我们发现更麻烦的问题是接收方邮件服务商(比如腾讯)会对每个发送 IP 有配额限制,共享 IP 地址很容易导致超出配额被接收方服务器拒收,导致很多用户无法收到(或者无法及时收到)我们发出的邮件。这对我们的用户造成了很大的困扰。
  • 不能自定义 MAIL-FROM (sender address) 头字段。Postmark 和 SES 出于监控的考虑,对发出的邮件都是生成随机的 SMTP 信封 sender address (不同于信内的 from address),并且不能让客户自定义该字段的内容。这会导致三个问题:一方面是与前面的 IP 配额问题相同,接收方邮件服务器通常也有发送域名配额,共用的 sender address 导致配额很快耗尽而被拒收;另一方面不少网页邮件客户端显示我们的邮件是 "来自: [email protected] (由 [email protected] 代发)” 字样,这对于很多不理解邮件代发机制的用户而言是个额外的认知负担,他们会担心这个邮件是不是伪造的;最后,不少接收方会因为 sender address 和 from address 不一致而提高我们邮件的垃圾评分,导致送达问题。
  • 以上两点导致我们无法和国内的几家大型邮件服务商(如网易、腾讯等)合作,让他们把我们加入白名单,因为他们无法有效区分我们通过 Postmark 和 SES 发送的邮件和其他采用同样服务的人发出的邮件。

所以我们在2011年底的时候先将周刊邮件切换到了一家新的邮件服务商 Mailgun [5]。Mailgun 是由美国著名的投资者/机构 Y Combinator, SV Angel, Yuri Milner, Maynard Webb, Paul Buchheit (Gmail 创始人之一), Geoff Ralson (Yahoo Mail 创始人) 等投资的一家新兴邮件发送服务提供商。

Mailgun 给我们提供了独享的邮件发送 IP 地址(区别开 transactional 和 bulk),并且可以定制我们自己域名的 sender address。另外 Mailgun 有非常完善的邮件队列管理机制,会尽量保证发出的邮件送达接收方邮箱,不会因为 IP/域名配额导致大量邮件弹回。Mailgun 的 API 也非常简洁,只需要几十行代码就能搭建一个适应我们需要的简易并且健壮的客户端,而且还提供很多 Postmark/SES 没有的功能,比如处理接收邮件后向指定的 URL 发送 POST 请求,发送失败实时通知,mail campaign 管理等。

到目前为止我们已经用 Mailgun 发送了将近十次的每周精选了,昨天(2012年2月28日)我们把线上通知邮件从 Postmark 切换到了 Mailgun,到目前为止一切都很顺畅。在过去三个月的磨合期中 Mailgun 团队非常耐心、仔细、及时的解决了我们遇到的一些具体问题,我们对他们的服务非常满意。如果你也是家需要稳定可靠发送大量邮件的创业公司,不妨试试这家服务。申请注册后可以给他们邮件告知是由 http://Zhihu.com 的 Rio 推荐的,会有额外的折扣赠送哦!

[1]: http://postmarkapp.com/
[2]: http://aws.amazon.com/ses/
[3]: zhihu.com/question…
[4]: zhihu.com/people…
[5]: http://mailgun.net/