Amazon SES 中电子邮件发送的工作原理 - Amazon Simple Email Service

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

Amazon SES 中电子邮件发送的工作原理

本主题介绍使用 SES 发送电子邮件时发生的情况以及在发送电子邮件后可能发生的各种结果。下图是发送过程的高度概述:

Email sending process with Amazon SES, showing potential bounces, complaints, and delivery outcomes.
  1. 充当电子邮件发件人的客户端应用程序向 SES 提出向一个或多个收件人发送电子邮件的请求。

  2. 如果请求有效,SES 将接受电子邮件。

  3. SES 通过 Internet 将邮件发送给收件人。一旦邮件传递到 SES,它通常会立即被发送,第一次送达尝试通常发生在几毫秒内。

  4. 此时,会存在不同可能性。例如:

    1. ISP 成功地将邮件送达至收件人的收件箱。

    2. 收件人的电子邮件地址不存在,因此 ISP 将退信通知发送到 SES。然后,SES 将该通知转发给发件人。

    3. 收件人收到邮件,但将它视为垃圾邮件并向 ISP 提出投诉。已与 SES 一起设置反馈循环的 ISP 会将该投诉发送到 SES,后者再将投诉转发给发件人。

以下部分回顾了在发件人向 SES 发送电子邮件请求之后以及在 SES 向收件人发送电子邮件之后可能出现的各种结果。

在发件人向 SES 发送电子邮件请求之后

当发件人向 SES 提出发送电子邮件的请求时,调用可能会成功或失败。以下部分介绍每种情况下会发生的情况。

成功的发送请求

如果发送到 SES 的请求成功,SES 将向发件人返回成功响应。此邮件包含一个邮件 ID,这是一个唯一地标识请求的字符串。您可以使用该邮件 ID 来标识发送的邮件或跟踪发送时遇到的问题(您必须在标识符与 SES 在接受电子邮件时传回给您的 SES 邮件 ID 之间存储您自己的映射关系)。然后,SES 基于请求参数汇编电子邮件,扫描邮件是否存在可疑的内容和病毒,然后通过 Internet 使用简单邮件传输协议(SMTP)发送该邮件。您的邮件通常会立即被发送;其中第一次送达尝试通常发生在几毫秒内。

注意

如果 SES 接受发件人的请求,然后确定该邮件包含病毒,SES 会停止处理邮件,并且不会尝试将其传输到收件人的邮件服务器。

失败的发送请求

如果发件人向 SES 发送的电子邮件发送请求失败,SES 会向发件人发送一个出错响应并丢弃该电子邮件。请求失败可能会有多种原因。例如,请求的格式可能不正确,或者电子邮件地址可能未由发件人进行验证。

您可用来确定请求是否失败的方法取决于您调用 SES 的方式。以下是如何返回错误和异常的示例:

  • 如果您通过查询 (HTTPS) API (SendEmailSendRawEmail) 调用 SES,则这些操作将返回错误。有关更多信息,请参阅 Amazon Simple Email Service API 参考

  • 如果您为使用异常的编程语言使用 AWS SDK,则对 SES 的调用将引发 MessageRejectedException。(异常的名称可能因软件开发工具包而略有不同。)

  • 如果您使用的是 SMTP 接口,则发件人会收到 SMTP 响应代码,但传递错误的方式取决于发件人的客户端。某些客户端可能显示错误代码;而其他客户端则不显示。

有关使用 SES 发送电子邮件时可能发生的错误的信息,请参阅 Amazon SES 电子邮件发送错误

在 Amazon SES 发送电子邮件之后

如果发件人向 SES 发送的请求成功,SES 将发送电子邮件且会产生以下任一结果:

  • 成功送达且收件人不反对接受电子邮件 – ISP 接受电子邮件,然后 ISP 将电子邮件送达至收件人。成功的送达如下图中所示。

    Email flow diagram showing sender, Amazon SES, receiver ISP, and recipient with successful delivery.
  • 硬退信 – 电子邮件由于某种持续存在的情形而被 ISP 拒绝,或者由于电子邮件地址位于 SES 黑名单上而被 SES 拒绝。如果某个电子邮件地址近期对任何 SES 客户造成了“硬退信”,则该邮件地址将被列入 SES 黑名单。在 ISP 中出现硬退信的原因可能是收件人地址无效。ISP 会将硬退信通知发送回 SES,然后 SES 会通过电子邮件或 Amazon Simple Notification Service(Amazon SNS)通知发件人,具体取决于发件人的设置。SES 以同样方式通知发件人出现黑名单退信。来自 ISP 的硬退信的路径如下图所示。

    Email flow diagram showing sender, Amazon SES, and receiver with arrows indicating message path.
  • 软退信 – ISP 可能因某种暂时状况(例如,ISP 太忙而无法处理请求或收件人的邮箱已满)而无法向收件人送达电子邮件。如果域不存在,也可能发生软退信。ISP 将软退信通知发送回 SES,或者,如果出现不存在的域,则 SES 无法找到该域的电子邮件服务器。在任一情况下,SES 都会在一段较长时间内重新尝试发送电子邮件。如果 SES 无法在该时间内送达电子邮件,则它会通过电子邮件或 Amazon SNS 向发件人发送退信通知。如果 SES 可以在重试期间将电子邮件送达至收件人,则表示送达成功。软退信如下图所示。在这种情况下,SES 会重试发送电子邮件,而且 ISP 最终能够将邮件送达至收件人。

    Email flow diagram showing sender, Amazon SES, receiver, and recipient with soft bounce scenario.
  • 投诉 – ISP 接受电子邮件并将它送达至收件人,但收件人将该电子邮件视为垃圾邮件并在其电子邮件客户端中单击了类似“标记为垃圾邮件”的按钮。如果 SES 与 ISP 一起设置了反馈循环,则投诉通知会发送到 SES,然后 SES 将投诉通知转发给发件人。大部分 ISP 不会提供提交了投诉的收件人的电子邮件地址,因此来自 SES 的投诉通知会根据原始邮件的收件人以及 SES 从其收到投诉的 ISP,向发件人提供可能已发送投诉的收件人的列表。投诉的路径如下图所示。

    Diagram showing email flow from sender through Amazon SES, ISP, and recipient, with complaint feedback loop.
  • 自动响应 – ISP 接受电子邮件,然后 ISP 将邮件送达至收件人。然后,ISP 向 SES 发送自动响应,如外出 (OOTO) 消息。然后 SES 将自动响应通知转发给发件人。自动响应如下图所示。

    Diagram showing email flow from sender through Amazon SES, ISP, recipient, and auto-response back to sender.

    请确保您的支持 SES 的程序不会重试发送生成自动响应的消息。

    提示

    您可以使用 SES 邮箱模拟器测试成功送达、退信、投诉、OOTO 或地址位于黑名单上时发生的情况。有关更多信息,请参阅 手动使用邮箱模拟器