为什么 Amazon SES 上的入站电子邮件没有送达或保存到我的 Amazon S3 存储桶?

上次更新时间:2020 年 6 月 11 日

我设置了用于将入站电子邮件发送到 Amazon Simple Storage Service (Amazon S3) 存储桶的 Amazon Simple Email Service (Amazon SES) 接收规则。但是,入站电子邮件未送达或保存到 S3 存储桶。如何修复此问题?

解决方法

要查明并解决阻止您的入站电子邮件保存到 S3 存储桶的原因,请检查以下各项:

Amazon SES 域验证

要在 Amazon SES 上接收入站电子邮件,您必须完成电子邮件域的验证过程

邮件交换器记录(MX 记录)

要在 Amazon SES 上接收入站电子邮件,您必须在域的 DNS 设置上设置 MX 记录,或者将接收邮件服务器设置为将电子邮件转发到 Amazon SES 入站邮件服务器。MX 记录是指在其内使用 Amazon SES 的 AWS 区域的终端节点。

要使用 macOS 或 Linux 操作系统检查该记录是否存在,请运行 dig 命令:

注意:example.com 替换为您的域。 

dig MX example.com +short

如果 MX 记录存在,则该命令将返回 MX 记录:

example.com.           60      IN      MX      10 inbound-smtp.eu-west-1.amazonaws.com

要使用 Windows 操作系统检查该记录是否存在,请运行 nslookup 命令:

  1. 在命令提示符下,键入 NSLOOKUP。然后,按 Enter 键。
  2. > 提示符下,键入 set type=MX。然后,按 Enter 键。
  3. 在下一个 > 提示符下,键入您的域。例如,键入 example.com。然后,按 Enter 键。

如果 MX 记录存在,则该命令将返回 MX 记录:

Non-authoritative answer:
example.com    MX preference = 10, mail exchanger = inbound-smtp.eu-west-1.amazonaws.com

接收规则设置

确认用于将入站电子邮件发送到 Amazon S3 的接收规则位于活动规则集内。该规则必须位于活动规则集内才能应用于您的电子邮件。

此外,在 Amazon SES 控制台中查看接收规则并查看以下设置:

  • 已启用:确认此选项处于选中状态。必须启用接收规则才能将其应用于您的电子邮件。
  • 需要 TLS:如果选择此选项,则 Amazon SES 将拒绝未通过 TLS 加密的入站电子邮件。
  • 收件人:您可以输入单个电子邮件身份或电子邮件域。或者,您也可以将此字段留空,以便将该规则应用于所有已验证的域。如果您将单个电子邮件身份设置为收件人,请确认该身份可接收要存储在 Amazon S3 上的电子邮件 — 任何其他身份接收的电子邮件都不会发送到 Amazon S3。此外,如果将收件人设置为电子邮件域或所有已验证的域,请查看其他活动接收规则,以确认您的规则未重叠。
    注意:Amazon SES 根据您在规则集上配置的顺序运行接收规则。
  • 对象键前缀:如果已设置对象键前缀,请确保在 S3 存储桶中检查此前缀以查找入站电子邮件。

S3 存储桶权限

要将入站电子邮件发送到 S3 存储桶,您必须在存储桶策略中为 Amazon SES 授予所需权限

查看存储桶策略以确认 Amazon SES 拥有 s3:PutObject 的权限。此外,在存储桶策略中修改明确拒绝 Amazon SES 的 s3:PutObject 权限的任何 "Effect": "Deny" 语句。

加密

使用 AWS Key Management Service (AWS KMS) 加密入站电子邮件,您可以在创建 Amazon SES 接收规则的步骤中选择加密密钥。您必须在密钥策略中为 Amazon SES 授予所需权限

用于 Amazon SES 电子邮件接收的 IP 地址筛选器

如果您已为发送到 Amazon SES 的入站电子邮件设置 IP 地址筛选器,请确认入站电子邮件来自筛选器允许的 IP 地址。

电子邮件文件大小

要将入站电子邮件存储在 S3 存储桶中,电子邮件(包括标头)的文件大小必须为 30 MB 或更小