如何从Amazon SES迁移到Mailer To Go
Amazon SES 功能强大且成本低廉,但它将大量重复性工作转嫁给你:IAM 策略、区域选择、配置集、沙箱限制和自我信誉监控。将你的事务性邮件移至 Mailer To Go 是对 DNS 和凭证的受控交换——关键在于跨越压制列表并完成切换而不失信誉。以下是完整的迁移步骤,含真实配置和可逆的灰度发布。
还在犹豫?Amazon SES 替代方案对比解释了原因。本指南介绍的是方法。
开始前:清点 SES 正在做什么
SES 将配置分散在多个 AWS 界面上。在做任何改动前,先捕捉所有内容:
- 已验证身份 — 你发送的域名和电子邮件地址,以及它们在哪个区域获得验证。
- 沙箱状态 — 如果你的账户仍在 SES 沙箱中,你已经受到限制;迁移会消除该限制,但要记下当前的发送配额和速率。
- 压制数据 — SES 维护一个账户级压制列表,列出退回或投诉的地址。这必须随之转移;重新邮寄到被压制的地址会立即摧毁新域名的信誉。
- 你如何发送 — SMTP(
email-smtp.<region>.amazonaws.com)或 SESv2 API/SDK(或两者)。 - 配置集和事件目标 — 你今天的退回/投诉/投递事件流向何处(SNS、CloudWatch、Kinesis)。
- 大致日均/峰值流量,用于预热规划。
第 1 步 — 创建你的 Mailer To Go 发送域名
在 mailertogo.com 注册并添加一个发送子域名 — 我们推荐 mtg.yourdomain.com — 而不是根域名。它隔离信誉,如果你委托它,让我们管理 DNS。参见为什么 Mailer To Go 从 mtg.yourdomain.com 发送。
第 2 步 — 身份验证(SPF、DKIM、DMARC)
从你的仪表板发布 SPF 和 DKIM 记录,以及根处的 DMARC 策略。你已经在 SES 中完成过 DKIM 舞蹈(它为每个身份生成 CNAME),所以这很熟悉 — 只是值不同。在重叠期间保持 SES 和 Mailer To Go 都获得域名授权。完整演练含真实记录和 dig 验证:电子邮件身份验证,端到端。
第 3 步 — 交换你的凭证
SMTP。 SES 的标志是像 email-smtp.us-east-1.amazonaws.com 这样的主机和 IAM 衍生的 SMTP 凭证(来自用户生成,而非你的 AWS 访问密钥)。将同一邮件程序指向 Mailer To Go:
# 之前 — Amazon SES
host: email-smtp.us-east-1.amazonaws.com port: 587
username: <SES SMTP username> (IAM 衍生 — 非你的 AWS 访问密钥)
password: <SES SMTP password>
# 之后 — Mailer To Go
host: smtp.mailertogo.com port: 587 (或 465 用于 SSL)
username: <MAILERTOGO_SMTP_USER>
password: <MAILERTOGO_SMTP_PASSWORD>
在 Rails 中,那只是新的环境值 — 无需代码改动:
# config/environments/production.rb
config.action_mailer.smtp_settings = {
address: ENV["MAILERTOGO_SMTP_HOST"], # smtp.mailertogo.com
port: 587,
user_name: ENV["MAILERTOGO_SMTP_USER"],
password: ENV["MAILERTOGO_SMTP_PASSWORD"],
authentication: :plain,
enable_starttls: true
}
API。 如果你调用 SESv2 API 或 SDK,你可以通过 SMTP 将邮件程序指向 Mailer To Go(最少代码)或切换到 Mailer To Go REST API:
# 之前 — Amazon SES v2(AWS CLI)
aws sesv2 send-email \
--from-email-address you@yourdomain.com \
--destination ToAddresses=user@example.com \
--content '{"Simple":{"Subject":{"Data":"Hello"},"Body":{"Html":{"Data":"Hi"}}}}'
# 之后 — Mailer To Go REST API
curl -X POST https://api.mailertogo.com/v1/send \
-H "Authorization: Bearer $MAILERTOGO_API_KEY" \
-H "Content-Type: application/json" \
-d '{"from":"you@yourdomain.com","to":"user@example.com","subject":"Hello","html":"Hi"}'
无需 IAM 用户、策略或区域端点管理 — 一个密钥和一个端点。(完整的语言示例:使用 Mailer To Go API 和 SMTP 发送电子邮件。)
第 4 步 — 导入你的压制列表(不要跳过)
在切换前导出 SES 的账户级压制列表:
aws sesv2 list-suppressed-destinations --output json > ses-suppressed.json
将这些地址加载到你的 Mailer To Go 压制列表中,这样任何在 SES 上退回或投诉过的人永远不会再被邮寄。这一个步骤保护了你在 SES 上建立的信誉。
第 5 步 — 预热并逐步切换
新的发送域名没有信誉,所以不要一次翻转所有内容 — 这对来自 SES 的情况尤为重要,如果你在一天内移动大量现有流量,对收件箱提供商来说看起来像一次突增。并行运行两个提供商并分阶段转移流量(10% → 25% → 50% → 100% 超过一周或两周),从最受欢迎的邮件(密码重置、收据)开始。在每一步监控退回和投诉率,并保持 SES 准备好接回流量,直到你完全切换。
第 6 步 — 验证,然后停用
- 发送测试并确认 SPF、DKIM 和 DMARC 全部通过(Gmail → 显示原始内容)。
- 针对 Mailer To Go webhook 重新创建你依赖的任何事件处理(来自 SES 配置集),并确认退回/投诉事件流通。
- 一旦 100% 通过 Mailer To Go 运行几天干净,移除 SES SMTP/IAM 凭证并删除身份 — 但保留 SES 的 DNS 记录一到两周作为回滚安全网,然后移除它们。
回滚
因为切换是凭证 + DNS,回滚很快:将邮件程序的环境变量指回 SES。在重叠期间保持两个提供商都获得授权就是让那成为一行改动而不是紧急情况的关键。
初次接触子域名发送或身份验证?从为什么 Mailer To Go 从 mtg.yourdomain.com 发送和 SPF/DKIM/DMARC 设置指南开始。来自另一个提供商?参见从 SendGrid 迁移和从 Mailgun 迁移。