没有独享 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 管理等。