AWS SES 如何申请进入生产模式
1. 这类工单目前只支持英文
如果需要,可以借助一些翻译工具。我是用的 Claude,感觉比起谷歌翻译之类的,它翻译得更通顺些,但是也要自己过一遍,把不合适的内容改改(比如它自己发挥的内容)。
2. 工单写什么内容
For example, tell us how often you send email, how you maintain your recipient lists, and how you manage bounces, complaints, and unsubscribe requests. It is also helpful to provide examples of the email you plan to send so we can ensure that you are sending high-quality content that recipients will want to receive.
上边是我按 文档 里的要求提了工单之后,工单回复的内容。文档里其实已经说明了需要写哪些内容,我也按那个写了,但是工单还是又发了上边这段话。现在想想,可能是审核人员不忍心直接拒绝,所以给了我个机会补充更多信息。
他这里说的,其实和文档的要求大差不差。
如何收集和管理邮箱地址列表
原则上,SES 只能向明确订阅了你的内容的人发送邮件。所以,关于如何获取邮箱地址,要有详细的说明。如果可以,把收集邮箱地址的落地页链接附上。
如何处理退信、投诉、退订
退信和投诉是严重影响发件人声誉的事件,事前要预防,事后要处理。
退信主要是由于无效的邮箱地址,所以在用户提交邮箱地址时,要做好验证。你要详细说明如何防止收集到无效的邮箱。比如 regex 验证是否是邮箱,DNS MX 记录验证邮箱的域名是否是有效的域名等。更严格点,可以将提交了无效邮箱的 IP 纳入黑名单。
关于 DNS MX 记录查询多说一句,可以通过 Cloudflare DNS 或者 阿里云公共 DNS 查询,都有相关的接口。
投诉一般是因为将邮件发到了没打算收你邮件的人那里。所以,首先你要说明,只向自己收集到的邮件列表里的地址发邮件(当然你也要这么做)。然后,如果有人订阅了你的邮件,却又投诉你,那可以将该邮箱加入黑名单。甚至将其 IP 也加入黑名单。
退订事件发生时,务必要将该地址从邮件列表删除。可以的话,要硬删除,而不是通过 deleted_at 之类的字段做标记,以免代码出错,又将邮件发到该地址。
写到这里,我发现上边的内容主语有些混乱,但要说明的一点是,务必真的这么做了,你再向工单这么说明。如果虚假陈述,就算业务能跑起来,到时候出了退信和投诉,账户也可能被封禁。
发邮件的接口防盗刷
虽然你不会滥用你的发邮件接口,但保不住别人不会攻击。所以,防止被盗刷也是重要的一步。我是做了 IP 限频,email 限频,后边打算再加上工作量证明。
尽量防止超出每日限额和每秒限额
虽然超出限额会发送失败,不会真的发送出去,但是最好自己也做一下频率和额度控制。我是把邮件发送任务都放到了 SQS 队列,然后用 Lambda 执行实际邮件发送任务,SQS 作为 Lambda 事件源时,可以控制并发量。根据发送一封邮件的时长和 SES 给的每秒额度,就能算出来大概的并发量。
最好再附上邮件示例
我是把在 Substack 的历史存档附了上去。
文档里要求的其他问题,也要如实描述。
千言万语一句话,要仔细考虑如何保护自己的发件人声誉,并详细说明,越详细越好。比如邮件地址验证,不要简单地写一句会做校验,要详细地写如何做校验。
因为 SES 默认是共用一个 IP 池,如果有一个用户发件人声誉降低,可能就会影响到 IP 的声誉,进而影响其他用户。