

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# Amazon SES SMTP 问题
<a name="troubleshoot-smtp"></a>

本节包含与通过 Amazon SES 简单邮件传输协议（SMTP）接口发送电子邮件相关的几个常见问题的解决方案。它还包含 Amazon SES 返回的 SMTP 响应代码列表。

要了解有关通过 Amazon SES SMTP 接口发送电子邮件的更多信息，请参阅[使用 Amazon SES SMTP 接口发送电子邮件](send-email-smtp.md)。
+ **无法连接到 Amazon SES SMTP 端点。**

  Amazon SES SMTP 端点连接问题通常与以下问题有关：
  + **凭据不正确**-用于连接到 SMTP 终端节点的凭据与您的 AWS 凭据不同。要获取 SMTP 凭证，请参阅 [获取 Amazon SES SMTP 凭证](smtp-credentials.md)。有关凭证的更多信息，请参阅[Amazon SES 凭证的类型](send-email-concepts-credentials.md)。
  + **网络或防火墙问题** – 您的网络可能会在您尝试发送电子邮件时使用的端口上阻止出站连接。要确定本地网络上是否有问题导致出现连接问题，请在命令行中键入以下命令，并将 `port` 替换为您尝试使用的端口（通常为 465、587、2465 或 2587）：`telnet email-smtp.us-west-2.amazonaws.com port`

    如果您能够使用此命令连接 SMTP 服务器，并且您尝试使用 TLS Wrapper 或 STARTTLS连接 Amazon SES，请完成[使用命令行来测试与 Amazon SES SMTP 接口的连接](send-email-smtp-client-command-line.md)中所述的过程。

    如果您无法使用 `telnet` 或 `openssl` 连接到 Amazon SES SMTP 端点，则表明您的网络在您尝试使用的端口上阻止了出站连接（例如，有防火墙）。请向您的网络管理员咨询，以诊断和解决该问题。
+ **使用端口 25 从 Amazon EC2 实例发送到 Amazon SES，但收到超时错误。**

  默认情况下，Amazon EC2 会限制端口 25。要删除这些限制，请提交 [Amazon EC2 请求以删除电子邮件发送限制](https://aws-portal.amazon.com/gp/aws/html-forms-controller/contactus/ec2-email-limit-rdns-request)。您也可以使用端口 465 或 587（这两个端口不受限制）连接到 Amazon SES。
+ **网络错误导致电子邮件丢失。**

  确保您的应用程序在连接到 Amazon SES SMTP 端点时使用重试逻辑，且您的应用程序可以检测到网络错误，并在出错时重新尝试邮件传输。SMTP 是一个详细的协议，使用此协议发送电子邮件需要几次网络往返操作。由于 SMTP 的性质，潜在的网络错误增加。
+ **您失去与 SMTP 端点的连接。**

  丢失连接通常由以下问题引起：
  + **MTU 大小** – 如果您收到超时错误消息，则在用于连接到 Amazon SES SMTP 接口的计算机的网络接口上，最大传输单位（MTU）可能过大。要解决此问题，请将此计算机的 MTU 大小设置为 1500 字节。

    有关在 Windows、Linux 和 macOS 操作系统上设置 MTU 大小的更多信息，请参阅《Amazon Redshift 管理指南》中的[查询似乎在客户端挂起且未到达集群](https://docs.aws.amazon.com/redshift/latest/mgmt/connecting-drop-issues.html)。

    有关为 Amazon EC2 实例设置 MTU 大小的更多信息，请参阅《Amazon EC2 用户指南》**中的 [EC2 实例的网络最大传输单位（MTU）](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/network_mtu.html)。
  + **长期有效的连接** – Amazon SES SMTP 端点在 Elastic Load Balancer（ELB）背后的 Amazon EC2 实例队列上运行。为了确保系统具有容错能力，活动的 up-to-date Amazon EC2 实例会定期终止并替换为新实例。由于您的应用程序通过 ELB 连接到 Amazon EC2 实例，当 Amazon EC2 实例终止时连接也会随之无效。您应该在通过单一 SMTP 连接传输固定数量的消息后，或者该 SMTP 连接已活动特定时间后，建立新的 SMTP 连接。您需要通过实验才能找到适当的阈值，具体取决于应用程序的托管位置以及向 Amazon SES 提交电子邮件的方式。
+ **您需要知道 Amazon SES SMTP 邮件服务器的 IP 地址，以便将此 IP 地址加入网络允许列表。**

  Amazon SES SMTP 端点的 IP 地址位于负载均衡器之后。因此，这些 IP 地址会频繁更改。所以，我们无法提供 Amazon SES 端点各个 IP 地址的最终列表。我们建议您将 `amazonses.com` 域列入允许列表，而不是将单个 IP 地址列入允许列表。

## 由 Amazon SES 返回的 SMTP 响应代码
<a name="troubleshoot-smtp-response-codes"></a>

此部分包含 Amazon SES SMTP 接口返回的响应代码的列表。

您应重试收到 400 错误的 SMTP 请求。我们建议您实现一个重试请求的系统，该系统的等待时间逐渐变长（例如，在重试前等待 5 秒，然后等待 10 秒，接下去等待 30 秒）。如果第三次重试没有成功，请等待 20 分钟，然后重复此过程。要查看使用指数重试策略的实现示例，请参阅 AWS 消息收发和目标博客上的[How to handle a "Throttling - Maximum sending rate exceeded" error](https://aws.amazon.com//blogs/messaging-and-targeting/how-to-handle-a-throttling-maximum-sending-rate-exceeded-error/)。

**注意**  
AWS SDKs [自动](https://docs.aws.amazon.com/general/latest/gr/api-retries.html)实现重试逻辑，但他们使用 HTTPS 接口而不是 SMTP。

如果您收到 500 错误，则必须先修改您的请求以更正问题，然后重新提交请求。例如，如果您的 AWS 身份验证凭证无效，则必须更新您的应用程序以使用正确的凭证，然后才能再次提交请求。


****  

| 说明 | 响应代码 | 更多信息 | 
| --- | --- | --- | 
| 身份验证成功 | `235 Authentication successful` | 您的 SMTP 客户端已成功连接并登录到 SMTP 服务器。 | 
| 已成功传输 | `250 Ok MessageID` | *MessageID*是 Amazon SES 用来识别消息的唯一字符串。 | 
| 服务不可用 | `421 Too many concurrent SMTP connections` | Amazon SES 无法处理请求，因为当前与 SMTP 服务器的连接过多。 | 
| 本地处理错误 | `451 Temporary service failure` | Amazon SES 无法处理请求。请求可能存在阻止它被处理的问题。 | 
| Timeout | `451 Timeout waiting for data from client` | 请求之间间隔的时间太长，因此 SMTP 服务器已关闭连接。 | 
| 超出每日发送配额 | `454 Throttling failure: Daily message quota exceeded` | 您已超出 Amazon SES 允许您在 24 小时内发送的电子邮件的最大数量。有关更多信息，请参阅 [管理您的 Amazon SES 发送限制](manage-sending-quotas.md)。 | 
| 超出最大发送速率 | `454 Throttling failure: Maximum sending rate exceeded` | 您已超出 Amazon SES 允许您每秒发送的电子邮件的最大数量。有关更多信息，请参阅 [管理您的 Amazon SES 发送限制](manage-sending-quotas.md)。 | 
| 验证 SMTP 凭证时的 Amazon SES 问题 |  `454 Temporary authentication failure`  | 可能导致此问题的问题包括（但不限于）： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/ses/latest/dg/troubleshoot-smtp.html)  | 
| 接收请求的问题 |  `454 Temporary service failure`  | Amazon SES 未成功接收请求。因此，邮件未发送。 | 
| 凭证错误 | `530 Authentication required` | 您用于发送电子邮件的应用程序在连接到 Amazon SES SMTP 接口时未尝试进行身份验证。 | 
| 身份验证凭证无效 | `535 Authentication Credentials Invalid` | 您用于发送电子邮件的应用程序未向 Amazon SES 提供正确的 SMTP 凭证。请注意，您的 SMTP 凭据与您的 AWS 凭据不同。有关更多信息，请参阅 [获取 Amazon SES SMTP 凭证](smtp-credentials.md)。 | 
| 账户未订阅 Amazon SES | `535 Account not subscribed to SES` | 拥有 SMTP 凭证的用户尚未注册 Amazon SES。 AWS 账户  | 
| 邮件太长 | `552 Message is too long.` | 您尝试发送的邮件大小大于[最大邮件大小](quotas.md#quotas-email-sending)。 | 
| 账户未订阅 Amazon SES | `535 Account not subscribed to SES` | 拥有 SMTP 凭证的用户尚未注册 Amazon SES。 AWS 账户  | 
| MAIL FROM 语法错误 | `553 <email-address> Invalid email address` | SMTP 邮件的 MAIL FROM 部分存在语法错误。请检查您是否遵循正确的格式，不要忘记在“<>”中附上电子邮件地址。 | 
| RCPT TO 语法错误 | `553 <email-address> address unknown` | SMTP 消息的 RCPT TO 部分存在语法错误。请检查您是否遵循正确的格式，不要忘记在“<>”中附上电子邮件地址。 | 
| 用户没有权限来调用 Amazon SES SMTP 端点 | `554 Access denied: User UserARN is not authorized to perform ses:SendRawEmail on resource IdentityARN` | 拥有 SMTP 证书的用户的 AWS Identity and Access Management (IAM) 策略或 Amazon SES 发送授权策略不允许调用 Amazon SES SMTP 终端节点。 | 
| 未经验证的电子邮件地址 | `554 Message rejected: Email address is not verified. The following identities failed the check in region region: identity0, identity1, identity2` | 您正在尝试通过未[验证是否可通过 Amazon SES 账户发送电子邮件](verify-addresses-and-domains.md)的电子邮件地址或域发送电子邮件。此错误可能适用于“发件人”、“源”、“发送者”或“退回路径”地址。如果您的账户仍在沙盒中，则还必须验证每个收件人电子邮件地址（[Amazon SES 邮箱模拟器](send-an-email-from-console.md#send-email-simulator)提供的收件人除外）。如果 Amazon SES 无法显示未通过验证检查的所有身份，则错误消息将以三个句点（...）结束。  Amazon SES 有[多个](regions.md)终端节点 AWS 区域，每个终端节点的电子邮件地址验证状态各不相同 AWS 区域。您必须为要使用的每个发件人完成验证过程。 AWS 区域   | 

**注意**  
对于本页上的故障排除未能解决的 SMTP 问题，请尝试[联系我们](https://aws.amazon.com/ses/faqs/#Contacting_Us)下列出的 SES 支持选项。