知识库
通过您自己的 Amazon SES 账户发送电子邮件
通过 SMTP 连接您自己的 Amazon SES 账号:选择并固定在一个区域、使用 Easy DKIM、在连接前退出沙盒模式,以及为什么 SMTP 凭证不等同于您的 AWS 访问密钥。
您将需要一个 AWS 账户以及您域名的 DNS 访问权限。在所有这些选项中,SES 绝对是价格最便宜的一个,但也是步骤最多的一个。
Amazon 的官方文档:验证域名 · 获取 SMTP 凭据 · 移出沙盒
⭐ 我们通过 SES 的 SMTP 接口(而非 REST API)进行连接。这就是为什么系统要求您提供 SMTP 用户名和密码,而不是 AWS 访问密钥的原因。这两种途径发送的消息完全相同;SMTP 方式避免了一整类在外部极难诊断的 AWS 请求签名问题,而且这也是 Amazon 特意发布凭据以便像我们这样的工具可以使用的接口。
1. 选择一个区域并留在该区域
SES 是按区域划分的。以下所有内容——您验证过的域名、您的凭据、您的发送配额——都属于一个 AWS 区域,在任何其他区域中都不存在。
选择离您的客户最近的一个(欧洲选 eu-west-1,北美选 us-east-1)并记下来。在爱尔兰验证您的域名,然后又在法兰克福创建凭据,是这里最容易浪费一个下午的做法,并且它产生的错误信息不会包含任何关于区域的内容。
2. 验证您的域名
Amazon SES 控制台 → 身份 (Identities) → 创建身份 (Create identity) → 域名 (Domain)。输入诸如 mail.yourdomain.com 的子域名。
启用 Easy DKIM 并选择 RSA_2048_BIT。SES 会为您提供三个 CNAME 记录:
| 类型 | 主机 | | --- | --- | | CNAME | <token1>._domainkey.mail.yourdomain.com | | CNAME | <token2>._domainkey.mail.yourdomain.com | | CNAME | <token3>._domainkey.mail.yourdomain.com |
添加全部三条记录。验证通常在一小时内完成。
⭐ 另外,启用自定义发件人 (MAIL FROM) 域名 (bounce.mail.yourdomain.com) 并添加其要求的 MX 和 SPF TXT 记录。否则,您的信封发件人将会是 amazonses.com,因此 SPF 会对齐到 Amazon 而不是您,并且您将仅依赖 DKIM。
3. 移出沙盒 —— 这是人们经常漏掉的一步
⛔⛔ 新的 SES 账户默认处于沙盒中,只能发送到您单独验证过的地址。它会接受其他所有内容,但不会投递任何内容。
这正是我们设置验证步骤旨在捕获的故障:在沙盒中,SES 会以一个完全正常的成功响应接收您的消息,然后将其丢弃。如果您通过向偶然在 AWS 中验证过的地址发送测试来验证我们的设置,它会成功——然后发往真实客户的所有消息都将消失。
账户控制台 → 请求生产访问权限 (Request production access)。Amazon 会询问您发送什么内容以及您如何处理退信;几句关于向您自己的客户发送事务性通知的诚实说明通常会在 24 小时内获得批准。
⭐ 请在在此处连接 SES 之前完成此操作。之后将没有任何需要调试的内容,因为没有任何东西会失败。
4. 创建 SMTP 凭据
SES 控制台 → SMTP 设置 (SMTP settings) → 创建 SMTP 凭据 (Create SMTP credentials)。
这会创建一个具有仅发送权限的 IAM 用户,并为您提供一个 SMTP 用户名和一个 SMTP 密码。
⛔ 这些不是您的 AWS 访问密钥和秘密密钥。它们是通过特定算法从 IAM 秘密派生而来的,两者不能互换。在此处粘贴 AWS 秘密访问密钥每次都会身份验证失败,并且错误信息只会简单地提示凭据被拒绝。
⚠️ 密码仅显示一次。请在离开该页面之前下载 CSV 文件。
5. 在 Zinn® 中进行连接
在您的控制台中打开电子邮件发送 (Email sending):
- 提供商 (Provider) — Amazon SES
- 从此域名发送 (Send from this domain) —
mail.yourdomain.com - AWS 区域 (AWS region) — 来自第 1 步的区域,例如
eu-west-1 - SMTP 用户名 (SMTP username) — 来自第 4 步
- 端口 (Port) — 保持 587 不变
- SES SMTP 密码 (SES SMTP password) — 来自第 4 步
我们会为您构建主机 (email-smtp.<region>.amazonaws.com),因此不会有输错主机名的情况。
6. 发送测试并输入验证码
点击发送测试消息,将其发送到您未在 AWS 中验证过的不同域名下的收件箱——个人 Gmail 地址是理想的选择,因为它可以证明您已经走出了沙盒。读取验证码并将其输入。
出现故障时
向真实客户发送时提示 “电子邮件地址未验证” — 您仍处于沙盒中。请看第 3 步。
535 Authentication Credentials Invalid — 您使用了 AWS 访问密钥而不是 SMTP 凭据(第 4 步),或者凭据属于与您输入的区域不同的区域。
“超出最大发送速率” — 一个新的生产账户起始额度为每秒 14 条消息,每天 50,000 条。这已经是很大量的通知了,但如果您正在迁移庞大的客户群,请先申请提升额度。
测试时正常,但在生产环境中停止发送 — 检查 SES 信誉 (Reputation) 控制台。当退信率或投诉率超过其阈值时,Amazon 会自动暂停发送,而使用旧的客户列表很容易超过该阈值。