知乎的邮件服务商

风险投资人/播客主播/前知乎工程师

知乎用 Amazon SES 发送邮件的速度怎么样?费用如何?

速度还不错,看你怎么设计你的发送系统。我们现在这个还比较简单,等完善以后也许会考虑开源。主要的难点在于协调发送进度与你自己应用相关的信息。比如知乎发送每周精选之前要检查用户是否已经取消订阅,不能发送给取消订阅的用户。 那么就要协调数据库访问的频率,因为有可能某个用户刚好在你进行发送的时间内取消了订阅。

Amazon SES 有发送限额,刚开户的时候很低,只有每天一千,要经常发高质量的邮件【高质量的定义 Amazon SES 官方 FAQ 有】才能缓缓提高限额。知乎刚开始发送的时候由于量太大超过限额,经常出现被限速的情况。后来我跟 Amazon 申请了特别调整限额才解决这个问题。 你最好先预计好要发送的量,然后循序渐进。

从国内机房访问 Amazon SES API 经常会遇到网络问题【SSL 连接,你懂的】,所以发送代码一定要考虑到这点,记得容错。我们现在的发送系统是 Python 写的,由于网络问题,代码会在各个层次抛出意想不到的异常,比如底层封装的 HTTP 客户端会报 BadStatusLine 这种很少遇到的异常,普通测试很难想到。

SES 的送达率很不错,弹回率很低。我们测试的结果表明知乎用户的主流邮箱的送达延迟很低。 你需要统计你自己的用户邮箱然后做相应的测试。记得设置 SPF,SenderID 等相关的信息以免被当作 spam。能够用 DKIM 的也尽量用上吧。

费用很透明,$1/万封 + $0.12/GB 流量,头一 GB 流量免费。用 EC2 的话还能每天送你 2000 封免费发。价格非常简单、容易估算。

 

知乎的邮件系统为什么不再用 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 导致配额很快耗尽而被拒收;另一方面不少网页邮件客户端显示我们的邮件是 “来自: weekly@newsletter.zhihu.com (由 xxxxxxxxx@mail.amazonses.com 代发)” 字样,这对于很多不理解邮件代发机制的用户而言是个额外的认知负担,他们会担心这个邮件是不是伪造的;最后,不少接收方会因为 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 团队非常耐心、仔细、及时的解决了我们遇到的一些具体问题,我们对他们的服务非常满意。如果你也是家需要稳定可靠发送大量邮件的创业公司,不妨试试这家服务。

[1]: postmarkapp.com/
[2]: aws.amazon.com/ses/
[3]: zhihu.com/question/1986
[4]: zhihu.com/people/ryan-h
[5]: mailgun.net/

Posted In EDM

Related Post

发表评论

电子邮件地址不会被公开。 必填项已用*标注