

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

# 使用 Amazon SES 接收电子邮件
<a name="receiving-email"></a>

除了使用 Amazon SES 管理您的电子邮件发送外，您还可以配置 SES 代表您的一个或多个域接收电子邮件。作为电子邮件接收方，SES 会处理底层邮件接收操作，如与其他邮件服务器通信、扫描垃圾邮件和病毒、阻止来自不可信来源（[Spamhaus](https://www.spamhaus.org/) 或 SES 的阻止列表上的地址）的邮件，以及为所在域内的收件人接收邮件等。

您收到的电子邮件的处理范围由您指定的自定义说明决定。这些说明有以下两种形式：
+ **接收规则***（基于收件人的控制）*可提供对传入电子邮件的最佳控制精细度。接收规则可执行高级处理，例如在邮件发送到特定电子邮件地址时，将传入邮件送达 Amazon S3 存储桶、发布到 Amazon SNS 主题、发送到 Amazon WorkMail 或者自动发送退回邮件等等。
+ **IP 地址筛选条件***（基于 IP 的控制）*提供了广泛的控制级别，且易于设置。这些筛选条件允许您显式阻止或允许来自特定 IP 地址或 IP 地址范围的所有邮件。

要开始学习使用*接收规则*或 *IP 地址筛选器*进行电子邮件接收、设置和实施，请先通读 [电子邮件接收概念和使用案例](receiving-email-concepts.md)，了解其工作原理和不同使用方式的概览。接下来，[设置电子邮件接收](receiving-email-setting-up.md) 将指导您完成电子邮件接收设置的先决条件。然后，[电子邮件接收控制台演练](receiving-email-walkthroughs.md) 将指导您完成用于配置*接收规则*和 *IP 地址筛选条件*的向导。

**注意**  
仅当您的帐户位于 SES 支持电子邮件接收的 AWS 区域时，才能使用电子邮件接收。《AWS 一般参考》中的[电子邮件接收端点](https://docs.aws.amazon.com/general/latest/gr/ses.html#ses_inbound_endpoints)表列出了 SES 支持电子邮件接收的所有 AWS 区域。

**Topics**
+ [Amazon SES 电子邮件接收概念和使用案例](receiving-email-concepts.md)
+ [设置 Amazon SES 电子邮件接收](receiving-email-setting-up.md)
+ [Amazon SES 电子邮件接收控制台演练](receiving-email-walkthroughs.md)
+ [查看 Amazon SES 电子邮件接收的指标](receiving-email-metrics.md)

# Amazon SES 电子邮件接收概念和使用案例
<a name="receiving-email-concepts"></a>

当使用 Amazon SES 作为电子邮件接收方时，您需要告诉该服务如何处理您的邮件。主要方法是通过接收规则，使用*基于收件人的控制*来指定基于收件人执行的一组操作，从而为您提供对电子邮件接收的精细化控制。另一种方法是 IP 地址筛选条件，能够提供广泛的*基于 IP 的控制*，以根据来源 IP 地址或地址范围阻止或允许邮件。

本节介绍了这两种方法，以及 Amazon SES 如何处理收到的电子邮件的概览，并通过使用案例来帮助您在设置规则和筛选条件时考虑如何接收、筛选和处理电子邮件。

**Topics**
+ [使用接收规则进行基于收件人的控制](#receiving-email-concepts-rules)
+ [使用 IP 地址筛选条件进行基于 IP 的控制](#receiving-email-concepts-ip-filters)
+ [电子邮件接收过程](#receiving-email-process)
+ [Amazon SES 电子邮件接收的使用案例和限制](#receiving-email-consider-use-case)
+ [电子邮件接收身份验证和恶意软件扫描](#receiving-email-auth-and-scan)

## 使用接收规则进行基于收件人的控制
<a name="receiving-email-concepts-rules"></a>

控制传入邮件的主要方法是指定如何通过您的任何已验证身份（包括域、子域或电子邮件地址）的有序操作列表来处理邮件。请注意，电子邮件地址必须属于您的已验证域身份之一。这些操作在*规则集*中您创建的*接收规则*中进行定义和排序。

另一种选项是，您还可以添加收件人条件，以指定仅在传入邮件的收件人地址与条件中指定的收件人身份匹配时才执行操作。例如，如果您拥有 *example.com*，您可以指定 *user@example.com* 收到的邮件应退回，并且 *example.com* 及其子域的所有其他邮件将送达。

否则，如果您不添加任何收件人条件，则操作将应用于所有内容，包括所有电子邮件地址、域和属于已验证域的子域。以下操作可应用于您的接收规则：
+ **添加标头操作** – 向收到的电子邮件添加一个标头。此操作通常仅与其他操作结合使用。
+ **Return bounce response action**（返回退回邮件响应操作）– 通过将退回邮件响应返回给发件人来阻止电子邮件，并通过 Amazon SNS 通知您（可选）。
+ **调用 AWS Lambda 函数操作-** 通过 Lambda 函数调用您的代码，也可以选择通过 Amazon SNS 通知您。
+ **传送到 S3 存储桶操作** – 此操作会将邮件传送到 Amazon S3 存储桶，并通过 Amazon SNS 通知您（可选）。
+ **发布到 Amazon SNS 主题操作—**将完整的电子邮件发布到 Amazon SNS 主题。
**注意**  
SNS 操作包含 Amazon SNS 通知中电子邮件内容的完整副本。此处提到的其他 Amazon SNS 通知选项只通知您电子邮件的送达情况，它们包含与电子邮件相关的信息，但不包含电子邮件内容本身。
+ **停止规则集操作** – 终止对接收规则集的评估，并会通过 Amazon SNS 通知您（可选）。
+ **与亚马逊整合 WorkMail 操作-** 使用亚马逊处理邮件 WorkMail。您通常不会直接使用此操作，因为设置由Amazon WorkMail 负责。

接收规则将聚集到*规则集*。如果没有现有的规则集，则必须先创建规则集，然后才能开启创建接收规则。您可以为 AWS 账户定义多个规则集，但任何时候都只有一个规则集处于活动状态。下图显示了接收规则、规则集和操作之间的关系。

![\[入站电子邮件概述\]](http://docs.aws.amazon.com/zh_cn/ses/latest/dg/images/inbound_overview_v2.png)


## 使用 IP 地址筛选条件进行基于 IP 的控制
<a name="receiving-email-concepts-ip-filters"></a>

您可以通过设置 **IP 地址筛选器**控制邮件流。IP 地址筛选器是可选的，供您指定是接受还是阻止来自某个 IP 地址或 IP 地址范围的邮件。IP 地址筛选器可以包括*阻止列表*（包含您想要阻止传入邮件的 IP 地址）和*允许列表*（包含您想要始终接收邮件的 IP 地址）。

IP 地址筛选器对阻止垃圾邮件非常有效。Amazon SES 会维护自己的阻止列表，其中包括 Spamhaus 中列出的已知发送垃圾邮件的 IP 地址。但是，您可选择接收来自这些 IP 地址的邮件，方法是将这些地址添加到您的允许列表。由于没有用于显示哪些 IP 地址受到阻止的日志，因此受到阻止的发件人需要通知您。这也是帮助发件人确定其 IP 地址是否在阻止列表（例如 [Spamhaus](https://www.spamhaus.org/)）中的好机会，并建议他们要求从列表中撤除。这样做对您和发件人都有好处，因为您不必为发件人维护 IP 地址筛选器，而且发件人将提高其电子邮件可送达性。

**注意**  
无论您的 IP 地址筛选器配置如何，Amazon EC2 都将阻止端口 25（邮件发送）上的出站流量，除非已列入允许列表。有关更多信息，请参阅这篇 [AWS re: Post 文章](https://repost.aws/knowledge-center/ec2-port-25-throttle)。
如果您只希望接收来自有限已知 IP 地址列表的邮件，则请设置包含 `0.0.0.0/0` 的阻止列表，并设置包含所信任 IP 地址的允许列表。原定设置情况下，此配置会阻止全部 IP 地址，并仅允许来自您显式指定的 IP 地址的邮件。

## 电子邮件接收过程
<a name="receiving-email-process"></a>

当 Amazon SES 为您的域接收电子邮件时，将发生以下事件：

1. Amazon SES 首先查看发件人的 IP 地址。在以下情况下，Amazon SES 不允许邮件通过此阶段：
   + IP 地址位于您的阻止列表中。
   + IP 地址在 Amazon SES 阻止列表中但不在您的允许列表中。

1. Amazon SES 检查活动规则集，以确定是否有任何接收规则包含收件人条件：
   + 如果存在收件人条件，且该条件与任何传入电子邮件的收件人匹配，则 Amazon SES 将接受该电子邮件。否则，如果没有任何匹配项，Amazon SES 将阻止电子邮件。
   + 如果接收规则不包含收件人条件，则 Amazon SES 将接受邮件，该规则的所有操作都将应用于您拥有的所有已验证身份。

1. Amazon SES 对电子邮件进行身份验证，并扫描其内容中是否存在垃圾邮件和恶意软件：
   + 根据在 SMTL 事务期间使用的 MAIL FROM 的域下指定的 SPF 策略检查将电子邮件传输到 Amazon SES 的远程主机的 IP 地址。
   + 检查电子邮件标题部分中存在的 DKIM 签名。
   + 如果启用了内容扫描，则会扫描电子邮件内容中是否存在垃圾邮件和恶意软件。
   + 电子邮件身份验证和内容扫描结果将在接收规则评估期间提供给您。

   请参阅[电子邮件身份验证和恶意软件检测](#receiving-email-auth-and-scan)了解更多信息。

1. 对于 Amazon SES 接受的电子邮件，激活的规则集中的所有接收规则都将按照您定义的顺序应用；在每个接收规则中，操作将按照您定义的顺序执行。

## Amazon SES 电子邮件接收的使用案例和限制
<a name="receiving-email-consider-use-case"></a>

本节介绍了 Amazon SES 电子邮件接收中的一些一般注意事项和使用案例。常见问题和事实将以问答形式呈现，以帮助确定使用 Amazon SES 代表您拥有的一个或多个已验证域来接收和管理电子邮件是否有益。

### 区域可用性
<a name="receiving-email-consider-use-case-regions"></a>

**在您的区域中，Amazon SES 是否支持接收电子邮件？**

Amazon SES 仅支持在某些 AWS 地区接收电子邮件。有关支持电子邮件接收的区域的完整列表，请参阅《 AWS 一般参考》中的 [Amazon Simple Email Service 端点和限额](https://docs.aws.amazon.com/general/latest/gr/ses.html)。

### 基于 POP 或 IMAP 的电子邮件客户端
<a name="receiving-email-consider-use-case-clients"></a>

**是否可以使用 Microsoft Outlook 接收传入的电子邮件？**

Amazon SES 不包括用于接收传入电子邮件的 POP 或 IMAP 服务器。这意味着您不能使用 Microsoft Outlook 等电子邮件客户端来接收传入的电子邮件。如果您需要一种能够使用电子邮件客户端发送和接收电子邮件的解决方案，请考虑使用 [Amazon WorkMail](https://aws.amazon.com/workmail)。

### 使用其他 AWS 服务
<a name="receiving-email-consider-use-case-permissions"></a>

**您是否已设置适当的权限？**

如果需要将邮件传送到 S3 存储桶、发布到不属于您的 Amazon SNS 主题、触发 Lambda 函数或使用客户托管式密钥，您需要向 Amazon SES 授予访问这些资源的权限。要授予 Amazon SES 访问权限，您需要 APIs 针对来自控制台的资源或这些 AWS 服务创建策略。有关更多信息，请参阅[授予权限](receiving-email-permissions.md)。

### 电子邮件内容
<a name="receiving-email-consider-use-case-content"></a>

**您希望 Amazon SES 如何传递电子邮件内容？**

Amazon SES 可以通过两种方式为您提供电子邮件内容：它可以将电子邮件存储在您指定的 S3 存储桶中，也可以向您发送 Amazon SNS 通知，其中包含电子邮件的副本。Amazon SES 以多用途 Internet 邮件扩展（MIME）格式为您传送原始、未经修改的电子邮件。有关 MIME 格式的更多信息，请参阅 [RFC 2045](https://tools.ietf.org/html/rfc2045)。

**您将接收多大的电子邮件？**

如果您选择将电子邮件存储在 S3 桶中，最大电子邮件大小（包括标头）为 40 MB。如果您通过 Amazon SNS 通知接收电子邮件，则最大电子邮件大小（包括标头）为 150KB。

**您希望如何触发邮件处理？**

在邮件送达后，您需要使用自定义的代码来处理它。例如，您的应用程序可能会将 Base-64 编码的电子邮件转换为可显示的格式，并通过电子邮件客户端提供给最终用户。您可以通过几种方法开始此过程：
+ 如果您的电子邮件传送到 Amazon S3，您的应用程序可以侦听 S3 操作生成的 Amazon SNS 通知，从通知中提取电子邮件的消息 ID，然后使用该消息 ID 从 Amazon S3 中检索电子邮件。

  或者，您也可以编写 Lambda 函数，将电子邮件的处理方式纳入接收规则中。在这种情况下，接收规则首先将电子邮件写入 Amazon S3，再触发 Lambda 函数。Lambda 操作可以在接收规则内同步或异步执行，具体取决于 Lambda 函数是否需要返回可能影响其他操作执行的结果。我们建议您使用异步执行，除非您的使用案例中绝对需要同步执行。有关的更多信息 AWS Lambda，请参阅《[AWS Lambda 开发人员指南》](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html)。
+ 如果您的电子邮件使用 SNS 操作通过 Amazon SNS 通知传送，您的应用程序可以侦听 Amazon SNS 通知，然后从通知中提取电子邮件。

**您是否希望加密电子邮件？**

Amazon SES 与 AWS Key Management Service (AWS KMS) 集成，可以选择加密它写入您的 S3 存储桶的邮件。Amazon SES 在将您的邮件写入到 Amazon S3 之前，使用客户端加密对邮件进行加密。这意味着，在从 Amazon S3 取回邮件后，您必须负责对内容进行解密。[适用于 Java 的 AWS SDK](https://aws.amazon.com/sdk-for-java/) 和 [适用于 Ruby 的 AWS SDK](https://aws.amazon.com/sdk-for-ruby/) 提供能够为您处理解密的客户端。Amazon SES 仅在您选择将电子邮件传送到 S3 存储桶时才加密电子邮件。

### 不需要的邮件
<a name="receiving-email-consider-use-case-unwanted"></a>

**您希望在电子邮件接收过程中的哪个阶段阻止不需要的邮件？**

当发件人尝试向收件人发送电子邮件时，发件人的电子邮件服务器将与收件人的服务器交换一系列命令。此序列称为 *SMTP 会话*。

您可以在电子邮件接收过程中的两个点阻止传入的电子邮件：SMTP 会话期间和 SMTP 会话之后。使用 *IP 地址筛选器* 可在 SMTP 会话期间阻止邮件，使用*接收规则* 可在 SMTP 会话之后阻止电子邮件。

您可以使用 IP 地址筛选器阻止源自特定 IP 地址的电子邮件。使用 IP 地址筛选器阻止不需要的电子邮件的好处是，对于在 SMTP 会话期间被阻止的邮件，我们不会向您收取费用。使用 IP 地址筛选器的缺点是，它们会阻止来自您指定的 IP 地址的电子邮件，而不对邮件的实际内容进行任何分析。有关 IP 地址筛选器的更多信息，请参阅[创建 IP 地址筛选条件控制台演练](receiving-email-ip-filtering-console-walkthrough.md)。

您可以使用接收规则根据邮件发送到的地址（或者域或子域）向电子邮件的发件人发送退回邮件通知。使用接收规则的好处是，您可以先对传入邮件执行额外分析，然后再向发件人发送退回邮件通知。例如，只有当邮件未通过 DKIM 身份验证或被识别为垃圾邮件时，您才可以使用 AWS Lambda 发送退回通知。使用接收规则的缺点是，由于在 SMTP 会话后处理接收规则，因此，我们会就您收到的每封邮件向您收取费用。如果您使用 Lambda 分析传入邮件的内容，可能还需支付费用。有关接收规则的更多信息，请参阅[创建接收规则控制台演练](receiving-email-receipt-rules-console-walkthrough.md)。有关使用 Lambda 分析传入电子邮件的更多信息，请参阅[Lambda 函数示例](receiving-email-action-lambda-example-functions.md)。

### 邮件流
<a name="receiving-email-consider-use-case-streams"></a>

**您打算如何划分邮件流？**

您的域很可能收到不同类别的邮件。例如，域中的某些邮件 (例如，发送给 *user@example.com* 的电子邮件) 可能面向个人收件箱。其他邮件 (例如，发送给 *unsubscribe@example.com* 的电子邮件) 可能最好定向到自动运行的系统。您可以使用接收规则来划分传入邮件，使其得到不同处理。有关如何设置接收规则的信息，请参阅[创建接收规则](receiving-email-receipt-rules-console-walkthrough.md)。

## 电子邮件接收身份验证和恶意软件扫描
<a name="receiving-email-auth-and-scan"></a>

Amazon SES 对收到的每封电子邮件进行身份验证，并扫描其内容中是否存在垃圾邮件和恶意软件：SES 不会根据电子邮件身份验证或内容扫描结果对收到的电子邮件采取任何操作；但是，这些操作的结果将作为属性提供给您，以便您可以在 SES 接收规则操作（例如 [Amazon SNS 通知](receiving-email-notifications-examples.md#receiving-email-notifications-examples-sns-action)中使用它们，或作为[投递到 Amazon S3](receiving-email-action-s3.md) 的邮件标题。

**电子邮件身份验证**

Amazon SES 使用 SPF、DKIM 和 DMARC 对收到的每封电子邮件进行身份验证。作为活动[接收规则集](receiving-email-action-sns.md)中的规则评估的一部分，每种身份验证机制的结果都会在 SES 发送的 Amazon SNS 通知中提供。此外，如果您选择在 Amazon S3 中接收电子邮件副本，则电子邮件身份验证的结果将被捕获到 SES 添加到电子邮件标题部分的 `Authentication-Results` 标题中：

```
Authentication-Results: example.com;
spf=pass (spfCheck: 10.0.0.1 is permitted by domain of example.com) client-ip=10.0.0.1; envelope-from=example@example.com; helo=10.0.0.1;
dkim=pass header.i=example.com;
dkim=permerror header.i=some-example.com;
dmarc=pass header.from=example@example.com;
```

`Authentication-Results` 标题如 [RFC 8601](https://datatracker.ietf.org/doc/html/rfc8601) 所述

**电子邮件内容中的垃圾邮件和恶意软件扫描**

Amazon SES 会根据与电子邮件匹配的接收规则的 *ScanEnabled*(API) 或*垃圾邮件和病毒扫描* (控制台) 属性的值来扫描收到的电子邮件内容中是否存在恶意软件。默认情况下，SES 会扫描收到的电子邮件内容中是否存在恶意软件。要禁用对已收到的符合特定接收规则的电子邮件的内容扫描，如果使用 [API，则需要将接收规则的*ScanEnabled*标志设置为 false，如果使用](https://docs.aws.amazon.com/ses/latest/APIReference/API_ReceiptRule.html)[控制台](receiving-email-receipt-rules-console-walkthrough.md#receipt-rules-create-rule-settings)，则需要清除 “*垃圾邮件和病毒扫描*” 复选框。如果已启用与电子邮件匹配的接收规则扫描，则内容扫描结果会在 SES 发送的 Amazon SNS 通知中提供，作为活动[接收规则集](receiving-email-action-sns.md)中的规则评估的一部分。此外，如果您选择在 Amazon S3 中接收电子邮件副本，则内容扫描结果将被捕获到 SES 添加到电子邮件标题部分的 `X-SES-Spam-Verdict` 和 `X-SES-Virus-Verdict` 标题中。

```
X-SES-Spam-Verdict: PASS
X-SES-Virus-Verdict: FAIL
```

上述标题的可能值如下所列：
+ [垃圾电子邮件](receiving-email-notifications-contents.md#receiving-email-notifications-contents-spamverdict-object)
+ [病毒](receiving-email-notifications-contents.md#receiving-email-notifications-contents-virusverdict-object)

现在，您已经了解了电子邮件接收的概念、工作原理及使用案例，接下来您可以开启 [设置电子邮件接收](receiving-email-setting-up.md)。

# 设置 Amazon SES 电子邮件接收
<a name="receiving-email-setting-up"></a>

本节介绍了开始配置 Amazon SES 以接收邮件之前所需的先决条件。请务必先阅读 [电子邮件接收概念和使用案例](receiving-email-concepts.md)，以了解 Amazon SES 工作原理的概念，并考虑希望如何接收、筛选和处理电子邮件。

在创建*规则集*、*接收规则*和 *IP 地址筛选条件*配置电子邮件接收之前，必须先完成以下设置先决条件：
+ 发布 DNS 记录证明您拥有域，使用 Amazon SES 验证您的域。
+ 允许 Amazon SES 发布 MX 记录来接收您域的电子邮件。
+ 授予 Amazon SES 访问其他 AWS 资源的权限，以便执行接收规则操作。

创建和验证域身份时，您需要将记录发布到 DNS 设置，以完成验证过程，但仅凭这一点还不足以使用电子邮件接收。针对电子邮件接收，还需要发布 MX 记录以指定自定义邮件发件人域。此记录用于您域的 DNS 设置，以允许 SES 接收您域的电子邮件。授予权限是必需的，因为除非 Amazon SES 有权使用这些操作所需的相应 AWS 服务，否则您在收据规则中选择的操作将不起作用。

**Topics**
+ [为 Amazon SES 接收电子邮件验证您的域](receiving-email-verification.md)
+ [为 Amazon SES 电子邮件接收发布 MX 记录](receiving-email-mx-record.md)
+ [授予 Amazon SES 电子邮件接收的权限](receiving-email-permissions.md)

# 为 Amazon SES 接收电子邮件验证您的域
<a name="receiving-email-verification"></a>

与任何您要使用 Amazon SES 发送或接收电子邮件的域相同，您必须首先证明您拥有该域。验证过程包括使用 SES 启动域验证，然后以别名记录或 TXT 格式将 DNS 记录发布到您的 DNS 提供商，具体取决于您使用何种验证方式。

通过控制台，您可以使用 [Easy DKIM](send-email-authentication-dkim-easy.md) 或 [自带 DKIM (BYODKIM)](send-email-authentication-dkim-bring-your-own.md) 验证您的域，并轻松复制其 DNS 记录以发布到您的 DNS 提供商 - 见 [创建域身份](creating-identities.md#verify-domain-procedure) 中的操作方法说明。或者，您可以使用 SES [https://docs.aws.amazon.com/ses/latest/APIReference/API_VerifyDomainDkim.html](https://docs.aws.amazon.com/ses/latest/APIReference/API_VerifyDomainDkim.html)或[https://docs.aws.amazon.com/ses/latest/APIReference/API_VerifyDomainIdentity.html](https://docs.aws.amazon.com/ses/latest/APIReference/API_VerifyDomainIdentity.html) APIs。

您可以在 SES 控制台的 “已[验证身份](view-verified-domains.md)” 表中查看其状态，或者使用 SES 或，轻松确认您的域名或电子邮件地址已通过验证[https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_GetEmailIdentity.html](https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_GetEmailIdentity.html) APIs。[https://docs.aws.amazon.com/ses/latest/APIReference/API_GetIdentityVerificationAttributes.html](https://docs.aws.amazon.com/ses/latest/APIReference/API_GetIdentityVerificationAttributes.html)

# 为 Amazon SES 电子邮件接收发布 MX 记录
<a name="receiving-email-mx-record"></a>

*邮件交换器* 记录（*MX 记录*）是一种配置，指定哪些邮件服务器可以接受发送到您的域的电子邮件。

要让 Amazon SES 管理您的传入电子邮件，您需要将 MX 记录添加到您的域的 DNS 配置。您创建的 MX 记录是指接收您使用 Amazon SES 的 AWS 地区的电子邮件的终端节点。例如，美国西部（俄勒冈）区域的端点为 *inbound-smtp.us-west-2.amazonaws.com*。有关完整的端点列表，请参阅 [SES 区域和端点](regions.md#region-endpoints)。

**注意**  
在 Amazon SES 中接收电子邮件的终端节点不是 IMAP 或 POP3 电子邮件服务器。您不能 URLs 将它们用作电子邮件客户端中的传入邮件服务器。如果您需要一种能够使用电子邮件客户端发送和接收电子邮件的解决方案，请考虑使用 [Amazon WorkMail](https://aws.amazon.com/workmail)。

以下过程包括 MX 记录的常规创建步骤。*创建 MX 记录的具体步骤取决于您的 DNS 或托管服务提供商。*有关将 MX 记录添加到域的 DNS 配置的信息，请参阅提供商的文档。

**注意**  


**将 MX 记录添加到域的 DNS 配置**

1. （先决条件）要完成这些过程，您需要修改您域的 DNS 记录。如果您无法访问 DNS 记录，或者您不方便这样做，请联系您的系统管理员以获取帮助。

1. 登录 DNS 提供商的管理控制台。

1. 创建新的 MX 记录。

1. 对于 MX 记录的 **Name (名称)**，输入您的域。例如，如果您希望 Amazon SES 管理发送到域 *example.com* 的电子邮件，请输入以下内容：

   ```
   example.com.
   ```
**注意**  
根据您的 DNS 提供商：1) 域扩展名末尾的尾随 `.` 可能不需要。2）**名称**字段可能被称为**主机**、**域**或**邮件域**。

1. 对于 **Type**（类型），选择 **MX**。
**注意**  
一些 DNS 提供商将 **Type**（类型）字段称为 **Record Type**（记录类型）或类似名称。

1. 对于 **Value**（值），输入以下内容：

   ```
   10 inbound-smtp.region.amazonaws.com
   ```

   在前面的示例中，*region*替换为您在 Amazon SES 中使用的 AWS 区域接收电子邮件的终端节点的地址。例如，如果您使用的是美国东部（弗吉尼亚北部）区域，请*region*替换为`us-east-1`。有关电子邮件接收端点的完整列表，请参阅 [SES 区域和端点](regions.md#region-endpoints)。
**注意**  
对于记录 **Value**（值）和记录 **Priority**（优先级），一些 DNS 提供商的管理控制台包含单独的字段。如果您的 DNS 提供商是这种情况，请输入 `10` 作为 **Priority**（优先级）值，并为 **Value**（值）输入传入邮件端点 URL。

**重要**  
MX 记录的具体创建过程取决于您的 DNS 或托管提供商。请参阅您的提供商的文档或联系他们，以获取有关将 MX 记录添加到您域 DNS 配置的信息。

## 有关为不同提供商创建 MX 记录的说明
<a name="receiving-email-mx-record-links"></a>

为您的域创建 MX 记录的过程取决于您使用的 DNS 提供商。本节包含指向几个常用 DNS 提供商的文档的链接。此列表不是完整提供商列表。如果下面未列出您的提供商，您仍可以通过 Amazon SES 来使用此提供商。此列表中包含的不是对任何公司的产品或服务的认可或推荐。


| DNS/托管提供商名称 | 文档链接 | 
| --- | --- | 
|  Amazon Route 53  |  [使用 Amazon Route 53 控制台创建记录](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/resource-record-sets-creating.html)  | 
|  GoDaddy  |  [添加 MX 记录](https://www.godaddy.com/help/add-an-mx-record-19234)（外部链接）  | 
|  DreamHost  |  [如何更改我的 MX 记录？](https://help.dreamhost.com/hc/en-us/articles/215035328)（外部链接）  | 
|  Cloudflare  |  [设置电子邮件记录](https://developers.cloudflare.com/dns/manage-dns-records/how-to/email-records/)（外部链接）  | 
|  HostGator  |  [更改 MX 记录 - Windows](https://www.hostgator.com/help/article/changing-mx-records-windows)（外部链接）  | 
|  Namecheap  |  [如何设置邮件服务所需的 MX 记录？](https://www.namecheap.com/support/knowledgebase/article.aspx/322/2237/how-can-i-set-up-mx-records-required-for-mail-service)（外部链接）  | 
|  Names.co.uk  |  [更改您的域的 DNS 设置](https://www.names.co.uk/support/domains/1156-changing_your_domains_dns_settings.html)（外部链接）  | 
|  Wix  |  [在您的 Wix 账户中添加或更新 MX 记录](https://support.wix.com/en/article/adding-or-updating-mx-records-in-your-wix-account)（外部链接）  | 

# 授予 Amazon SES 电子邮件接收的权限
<a name="receiving-email-permissions"></a>

在 SES 中接收电子邮件时可以执行的某些任务，例如向亚马逊简单存储服务 (Amazon S3) Service 存储桶发送电子邮件或调用 AWS Lambda 函数，需要特殊权限。本节包含几个常用案例的示例策略。

**Topics**
+ [设置 IAM 角色权限以执行“交付到 S3 存储桶”操作](#receiving-email-permissions-s3-iam-role)
+ [授予 SES 写入 S3 存储桶的权限](#receiving-email-permissions-s3)
+ [授予 SES 使用您的 AWS KMS 密钥的权限](#receiving-email-permissions-kms)
+ [授予 SES 调用 AWS Lambda 函数的权限](#receiving-email-permissions-lambda)
+ [授予 SES 发布属于不同账户的 Amazon SNS 主题的权限 AWS](#receiving-email-permissions-sns)

## 设置 IAM 角色权限以执行“交付到 S3 存储桶”操作
<a name="receiving-email-permissions-s3-iam-role"></a>

以下几点适用于此 IAM 角色：
+ 它只能用于[交付到 S3 存储桶操作](receiving-email-action-s3.md)。
+ 如果要向 SES [电子邮件接收](regions.md#region-receive-email)不可用的区域中的 S3 存储桶写入数据，则必须使用该角色。

如果要写入到 S3 存储桶，您可以向 IAM 角色提供访问相关资源的权限，以便[交付到 S3 存储桶操作](receiving-email-action-s3.md)。您还需要授予 SES 权限才能代入该角色，以便通过 IAM 信任策略执行操作，如[下一节](#receiving-email-permissions-s3-iam-role-trust)所述。

必须将此权限策略粘贴到 IAM 角色的内联策略编辑器中，请参阅[交付到 S3 存储桶操作](receiving-email-action-s3.md)，并按照 **IAM 角色**项目中给出的步骤进行操作。（以下示例还包括可选权限，以防您想在 S3 操作中使用 SNS 主题通知或客户托管密钥。）

**注意**  
您可以选择设置 S3 操作而不指定 IAM 角色，只需在 S3 存储桶策略中允许 SES 服务，如 [授予 SES 写入 S3 存储桶的权限](#receiving-email-permissions-s3) 所示。这也适用于跨账户场景。
如果您为 S3 操作指定 IAM 角色，则 SES 将担任 “PutObject” 操作的角色，并且此处指定的 IAM 权限足以满足相同的账户使用需求。但是，对于跨账户使用，您需要一个额外的存储桶策略，允许 IAM 角色在存储桶中 PutObject “”。这由存储桶所有者授予跨账户存储桶权限来指定，如[存储桶所有者授予跨账户存储桶权限](https://docs.aws.amazon.com/AmazonS3/latest/userguide/example-walkthroughs-managing-access-example2.html)中所述。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "S3Access",
            "Effect": "Allow",
            "Action": "s3:PutObject",
            "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*"
        },
        {
            "Sid": "SNSAccess",
            "Effect": "Allow",
            "Action": "sns:Publish",
            "Resource": "arn:aws:sns:us-east-1:111122223333:my-topic"
        },
        {
            "Sid": "KMSAccess",
            "Effect": "Allow",
            "Action": "kms:GenerateDataKey*",
            "Resource": "arn:aws:kms:us-east-1::111122223333:key/key-id"
        }
    ]
}
```

------

对前面的策略示例进行以下更改：
+ *amzn-s3-demo-bucket*替换为您要写入的 S3 存储桶的名称。
+ *region*替换为您创建接收规则 AWS 区域 的位置。
+ 将 *111122223333* 替换为您的 AWS 账户 ID。
+ *my-topic*替换为要向其发布通知的 SNS 主题的名称。
+ *key-id*替换为您的 KMS 密钥的 ID。

### 适用于 S3 操作 IAM 角色的信任策略
<a name="receiving-email-permissions-s3-iam-role-trust"></a>

应将以下信任策略添加到 IAM 角色的*信任关系*中，以允许 SES 代入该角色。

**注意**  
仅当您未使用[交付到 S3 存储桶操作](receiving-email-action-s3.md)工作流程的 **IAM 角色**项目中给出的步骤，从 SES 控制台创建 IAM 角色时，才需要手动添加此信任策略。*当从控制台创建 IAM 角色时，系统会自动生成此信任策略并将其应用于该角色，因此您无需执行此步骤。*

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AllowSESAssume",
            "Effect": "Allow",
            "Principal": {
                "Service": "ses.amazonaws.com"
            },
            "Action": "sts:AssumeRole",
            "Condition": {
                "StringEquals": {
                  "AWS:SourceAccount":"111122223333",
                  "AWS:SourceArn": "arn:aws:ses:region:111122223333:receipt-rule-set/rule_set_name:receipt-rule/receipt_rule_name"
                }
            }
        }
    ]
}
```

------

对前面的策略示例进行以下更改：
+ *region*替换为您创建接收规则 AWS 区域 的位置。
+ 将 *111122223333* 替换为您的 AWS 账户 ID。
+ *rule\$1set\$1name*替换为包含接收规则（包含传送到 Amazon S3 存储桶操作）的规则集的名称。
+ *receipt\$1rule\$1name*替换为包含传送到 Amazon S3 存储桶操作的接收规则的名称。

## 授予 SES 写入 S3 存储桶的权限
<a name="receiving-email-permissions-s3"></a>

当您将以下策略应用于 S3 存储桶时，只要该存储桶位于支持 SES [电子邮件接收](https://docs.aws.amazon.com/general/latest/gr/ses.html#ses_inbound_endpoints)的区域中，它就会授予 SES 写入该存储桶的权限；如果您想写入*电子邮件接收*区域之外的存储桶，请参阅[设置 IAM 角色权限以执行“交付到 S3 存储桶”操作](#receiving-email-permissions-s3-iam-role)。有关创建接收规则，向 Amazon S3 传输传入电子邮件的更多信息，请参阅[交付到 S3 存储桶操作](receiving-email-action-s3.md)。

有关将策略附加到 S3 的存储桶的更多信息，请参阅《Amazon Simple Storage Service 用户指南》**中的[使用存储桶策略和用户策略](https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-iam-policies.html)。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement":[
    {
      "Sid":"AllowSESPuts",
      "Effect":"Allow",
      "Principal":{
        "Service":"ses.amazonaws.com"
      },
      "Action":"s3:PutObject",
      "Resource":"arn:aws:s3:::amzn-s3-demo-bucket/*",
      "Condition":{
        "StringEquals":{
          "AWS:SourceAccount":"111122223333",
          "AWS:SourceArn": "arn:aws:ses:region:111122223333:receipt-rule-set/rule_set_name:receipt-rule/receipt_rule_name"
        }
      }
    }
  ]
}
```

------

对前面的策略示例进行以下更改：
+ *amzn-s3-demo-bucket*替换为您要写入的 S3 存储桶的名称。
+ *region*替换为您创建接收规则的 AWS 区域。
+ 将 *111122223333* 替换为您的 AWS 账户 ID。
+ *rule\$1set\$1name*替换为包含接收规则（包含传送到 Amazon S3 存储桶操作）的规则集的名称。
+ *receipt\$1rule\$1name*替换为包含传送到 Amazon S3 存储桶操作的接收规则的名称。

## 授予 SES 使用您的 AWS KMS 密钥的权限
<a name="receiving-email-permissions-kms"></a>

为了让 SES 能够加密您的电子邮件，它必须具有使用 AWS KMS 密钥的权限，该密钥在设置接收规则时由您指定。您可以使用账户中的默认 KMS 密钥（**aws/ses**），也可以使用您创建的客户托管式密钥。如果您使用默认 KMS 密钥，不需要执行任何其他步骤来为 SES 提供使用权限。若要使用客户托管式密钥，您需要向 SES 提供该密钥的使用权限，方法是在密钥策略中添加一条语句。

使用以下策略语句作为密钥策略，以允许 SES 在您的域上接收电子邮件时使用您的客户托管式密钥。

```
{
  "Sid": "AllowSESToEncryptMessagesBelongingToThisAccount", 
  "Effect": "Allow",
  "Principal": {
    "Service":"ses.amazonaws.com"
  },
  "Action": [
    "kms:GenerateDataKey*"
  ],
  "Resource": "*",
  "Condition":{
        "StringEquals":{
          "AWS:SourceAccount":"111122223333",
          "AWS:SourceArn": "arn:aws:ses:region:111122223333:receipt-rule-set/rule_set_name:receipt-rule/receipt_rule_name"
        }
      }
}
```

对前面的策略示例进行以下更改：
+ *region*替换为您创建接收规则的 AWS 区域。
+ 将 *111122223333* 替换为您的 AWS 账户 ID。
+ 替换为包含您*rule\$1set\$1name*与电子邮件接收关联的接收规则的规则集的名称。
+ 替换为您*receipt\$1rule\$1name*与电子邮件接收关联的接收规则的名称。

如果您使用 AWS KMS 向启用服务器端加密的 S3 存储桶发送加密消息，则需要添加策略操作。`"kms:Decrypt"`使用前面的示例，将此操作添加到策略中，如下所示：

```
{
  "Sid": "AllowSESToEncryptMessagesBelongingToThisAccount", 
  "Effect": "Allow",
  "Principal": {
    "Service":"ses.amazonaws.com"
  },
  "Action": [
    "kms:Decrypt",
    "kms:GenerateDataKey*"
  ],
  "Resource": "*",
  "Condition":{
        "StringEquals":{
          "AWS:SourceAccount":"111122223333",
          "AWS:SourceArn": "arn:aws:ses:region:111122223333:receipt-rule-set/rule_set_name:receipt-rule/receipt_rule_name"
        }
      }
}
```

有关为 AWS KMS 密钥附加策略的更多信息，请参阅*《AWS Key Management Service 开发人员指南*》[AWS KMS中的使用密钥策略](https://docs.aws.amazon.com/kms/latest/developerguide/key-policies.html)。

## 授予 SES 调用 AWS Lambda 函数的权限
<a name="receiving-email-permissions-lambda"></a>

要允许 SES 调用 AWS Lambda 函数，您可以在 SES 控制台中创建接收规则时选择该函数。当您执行此操作时，SES 会自动为此函数添加必要的权限。

此外，也可以使用 AWS Lambda API 中的 `AddPermission` 操作将策略附加到函数。以下 `AddPermission` API 调用可授予 SES 调用 Lambda 函数的权限。有关向 Lambda 函数附加策略的更多信息，请参阅《AWS Lambda 开发人员指南》**中的 [AWS Lambda 权限](https://docs.aws.amazon.com/lambda/latest/dg/intro-permission-model.html)。

```
{
  "Action": "lambda:InvokeFunction",
  "Principal": "ses.amazonaws.com",
  "SourceAccount": "111122223333",
  "SourceArn": "arn:aws:ses:region:111122223333:receipt-rule-set/rule_set_name:receipt-rule/receipt_rule_name",
  "StatementId": "GiveSESPermissionToInvokeFunction"
}
```

对前面的策略示例进行以下更改：
+ *region*替换为您创建接收规则的 AWS 区域。
+ 将 *111122223333* 替换为您的 AWS 账户 ID。
+ *rule\$1set\$1name*替换为包含您在其中创建 Lambda 函数的接收规则的规则集的名称。
+ *receipt\$1rule\$1name*替换为包含您的 Lambda 函数的接收规则的名称。

## 授予 SES 发布属于不同账户的 Amazon SNS 主题的权限 AWS
<a name="receiving-email-permissions-sns"></a>

要在单独的 AWS 账户中发布针对某个主题的通知，您必须在 Amazon SNS 主题中附加政策。SNS 主题必须与域和接收规则集位于同一区域中。

以下政策授予 SES 使用单独 AWS 账户向 Amazon SNS 主题发布内容的权限。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Service": "ses.amazonaws.com"
            },
            "Action": "SNS:Publish",
            "Resource": "arn:aws:sns:us-east-1:111122223333:topic_name",
            "Condition": {
                "StringEquals": {
                "AWS:SourceAccount": "444455556666",
                "AWS:SourceArn": "arn:aws:ses:us-east-1:777788889999:receipt-rule-set/rule_set_name:receipt-rule/rule_name"
                }
            }
        }
    ]
}
```

------

对前面的策略示例进行以下更改：
+ *topic\$1region*替换为 AWS 区域 创建 Amazon SNS 主题时使用的。
+ *sns\$1topic\$1account\$1id*替换为拥有 Amazon SNS 主题的 AWS 账户的 ID。
+ *topic\$1name*替换为您要向其发布通知的 Amazon SNS 主题的名称。
+ *aws\$1account\$1id*替换为配置为接收电子邮件的 AWS 账户的 ID。
+ *receipt\$1region*替换为您创建接收规则 AWS 区域 的位置。
+ *rule\$1set\$1name*替换为包含您在其中创建 “发布到 Amazon SNS” 主题操作的接收规则的规则集的名称。
+ *receipt\$1rule\$1name*替换为包含 “发布到 Amazon SNS” 主题操作的接收规则名称。

如果您的 Amazon SNS 主题 AWS KMS 用于服务器端加密，则必须向密钥策略添加权限。 AWS KMS 您可以通过将以下策略附加到 AWS KMS 密钥策略来添加权限：

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AllowSESToUseKMSKey",
            "Effect": "Allow",
            "Principal": {
                "Service": "ses.amazonaws.com"
            },
            "Action": [
                "kms:GenerateDataKey",
                "kms:Decrypt"
            ],
            "Resource": "*"
        }
    ]
}
```

------

# Amazon SES 电子邮件接收控制台演练
<a name="receiving-email-walkthroughs"></a>

本节介绍了电子邮件接收控制台向导，可用于配置*接收规则*和 *IP 地址筛选条件*以管理电子邮件接收。在使用控制台向导之前，请务必先阅读 [电子邮件接收概念和使用案例](receiving-email-concepts.md)（以了解电子邮件接收工作原理）和 [设置电子邮件接收](receiving-email-setting-up.md)（以确保已完成设置先决条件）。

**Topics**
+ [创建接收规则控制台演练](receiving-email-receipt-rules-console-walkthrough.md)
+ [创建 IP 地址筛选条件控制台演练](receiving-email-ip-filtering-console-walkthrough.md)

# 创建接收规则控制台演练
<a name="receiving-email-receipt-rules-console-walkthrough"></a>

本节将指导您使用 Amazon SES 控制台创建和定义接收规则。理解接收规则工作原理的关键点在于：
+ *规则集*包含一组有序的接收规则；*接收规则*包含一组有序的操作。
+ 接收规则告诉 Amazon SES 如何通过执行指定的有序操作列表来处理传入邮件。
+ 此有序的操作列表可以根据第一个匹配的收件人条件进行选择；如果未指定，则这些操作将应用于属于已验证域的所有身份。
+ 接收规则在名为规则集的容器中创建和定义，虽然您可以创建多个规则集，但一次只能有一个规则集处于激活状态。
+ 激活的规则集中的接收规则将按指定的顺序执行。
+ 在创建接收规则之前，必须首先创建包含这些规则的*规则集*。

或者，您可以使用 `CreateReceiptRuleSet` API 创建一个空接收规则集，如 [Amazon Simple Email Service API 参考](https://docs.aws.amazon.com/ses/latest/APIReference/API_CreateReceiptRuleSet.html)中所述。随后，您可以使用 Amazon SES 控制台或 `CreateReceiptRule` API 来向其添加接收规则。

在继续演练之前，请确保您已满足使用基于收件人的电子邮件接收所需的所有必要先决条件。

## 先决条件
<a name="receipt-rules-prerequisites"></a>

在继续使用接收规则设置基于收件人的电子邮件控制之前，必须满足以下先决条件：

1. 确保您的终端节点位于 Amazon SES 支持电子邮件接收 AWS 区域 的地方。中的[电子邮件接收端点](https://docs.aws.amazon.com/general/latest/gr/ses.html#ses_inbound_endpoints)表 AWS 一般参考 列出了 SES 支持电子邮件接收的所有终端节点 AWS 区域 的电子邮件接收端点。

1. 首先需要在 Amazon SES 中[创建并验证域身份](verify-addresses-and-domains.md)。

1. 接下来，您需要通过[将 MX 记录发布](receiving-email-mx-record.md)域的 DNS 设置来指定哪些邮件服务器可以接收域的邮件。（MX 记录应指接收您使用 Amazon SES 所在 AWS 地区的邮件的 Amazon SES 终端节点。）

1. 最后，您需要授[予 Amazon SES 访问其他 AWS 资源的权限](receiving-email-permissions.md)才能执行接收规则操作。

## 创建规则集和接收规则
<a name="receipt-rules-create-rule-settings"></a>

本演练首先会创建包含规则的规则集，然后进入**创建规则**向导，以创建、定义和排序接收规则。该向导包含四个屏幕，分别用于定义规则设置、添加收件人条件、添加操作以及查看所有设置。

**使用控制台创建规则集和接收规则**

1. 登录 AWS 管理控制台 并打开 Amazon SES 控制台，网址为[https://console.aws.amazon.com/ses/](https://console.aws.amazon.com/ses/)。

1. 在导航窗格中的**配置**下面，选择**电子邮件接收**。
**注意**  
如果您的账户位于 SES 不支持电子邮件接收的 AWS 区域 ，则在 SES 控制台的左侧导航窗格中将看不到*电子邮件接收*。请参阅[先决条件](#receipt-rules-prerequisites)中列出的第一项。

1. 在 **Email receiving**（电子邮件接收）窗格的 **Receipt rule sets**（接收规则集）选项卡下，选择 **Create rule set**（创建规则集）。

1. 为规则集输入唯一的名称，然后选择**创建规则集**。

1. 选择**创建规则**，此时将打开**创建规则**向导。

1. 在**定义规则设置**页面的**接收规则详细信息**下，输入**规则名称**。

1. 对于**状态**，只有当您不希望 Amazon SES 在创建后运行此规则时，清除**启用**复选框；否则，请保持此选项处于选中状态。

1. （可选）在**安全和保护选项**下，对于**传输层安全性 (TLS)**，如果需要 Amazon SES 拒绝未通过安全连接发送的传入邮件，请选择**必需**。

1. （可选）对于**垃圾邮件和病毒扫描**，如果需要 Amazon SES 扫描传入邮件中是否有垃圾邮件和病毒，请选择**启用**。

1. 要继续执行下一个步骤，请选择**下一步**。

1. （可选）在**添加收件人条件**页面上，使用以下过程指定一个或多个收件人条件。每个接收规则最多可包含 100 个收件人条件。

   1. 在**收件人条件**下，选择**添加新收件人条件**，可指定要应用接收规则的接收电子邮件地址或域。下表使用地址 *user@example.com* 来显示如何指定收件人条件。  
****    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/ses/latest/dg/receiving-email-receipt-rules-console-walkthrough.html)
**重要**  
如果多个 Amazon SES 账户均接收某一通用域的电子邮件（例如，同一公司的多个团队各自拥有单独的 Amazon SES 账户），Amazon SES 将同时为各个账户处理所有匹配的接收规则。此行为可能导致一个账户生成退回邮件，而另一个账户接受该电子邮件的情况。  
我们建议您与组织中其他使用 Amazon SES 的团队相互协调，以确保每个账户使用唯一的接收规则，并且这些规则不重叠。在这些情况下，最好将接收规则配置为仅使用您的群组或团队独有的电子邮件地址或子域。

   1. 对要添加的每个收件人条件重复此步骤。添加完收件人条件后，选择**下一步**。

1. 在**添加操作**页面上，使用以下过程将一个或多个操作添加到接收规则。

   1. 打开**添加新操作**菜单，然后选择以下操作类型之一：
      + **[添加标头](receiving-email-action-add-header.md)** - 此操作向收到的电子邮件添加一个自定义标头。
      + **[返回退回邮件响应](receiving-email-action-bounce.md)** - 此操作通过向发件人返回退回邮件响应来拒绝收到的电子邮件。
      + **[调用 Lambda 函数](receiving-email-action-lambda.md)**-此操作通过 AWS Lambda 函数调用您的代码。
      + **[交付到 S3 存储桶](receiving-email-action-s3.md)** - 此操作将收到的电子邮件存储在 Amazon Simple Storage Service (S3) 存储桶中。
      + **[发布到 Amazon SNS 主题](receiving-email-action-sns.md)** - 此操作将完整的电子邮件发布到 Amazon Simple Notification Service (SNS) 主题。
      + **[停止规则集](receiving-email-action-stop.md)** - 此操作终止对接收规则集的评估。
      + **[集成 Amazon WorkMail](receiving-email-action-workmail.md)**-此操作与 Amazon 集成 WorkMail。

      有关每个操作的更多信息，请参阅 [操作选项](receiving-email-action.md)。

   1. 对要定义的每个操作重复此步骤。如果定义了多个操作，可以使用操作容器中的向上/向下箭头对其重新排序。选择 **Next (下一步)** 可继续到 **Review (审核)** 页面。

1. 在**审核**页面上，审核规则的设置和操作。如果需要进行更改，请选择**编辑**选项，或通过页面左侧的导航部分直接转到包含要编辑的内容的步骤。您可以选择使用 “**重新排序” 列中的 up/down 箭头更改 “**查看**” 页面的 “**操作**” 表格中列出的操作顺序**。

1. 如果您已准备好继续，请选择**创建规则**。

1. 在规则集的确认页面上，如果要立即实施规则集，请选择 **Set as active**（设置为活动状态）。

### 创建后的规则修改
<a name="receipt-rules-post-modifications"></a>

创建规则集后，可以编辑规则集及其包含的接收规则。不仅可以编辑，还可以选择复制规则集或其规则，以便快速创建新规则集或规则。下表显示了规则集和接收规则的可用修改：
+ **规则集**将列出其名称、状态和创建日期。规则集的修改选项包括：
  + **设置为激活/非激活**切换按钮将在设置状态之间切换。
  + **复制**按钮将复制规则集。系统将提示您提供唯一的名称。
  + **删除**按钮将删除规则集。系统将提示您确认此操作不可逆。
+ **接收规则**将列出其名称、状态、安全性和顺序。接收规则的修改选项包括：
  + **向上/向下箭头**可在规则集中重新排序规则执行。
  + **复制**按钮将创建所选规则的副本。系统将提示您提供唯一的名称。
  + **编辑**按钮将打开所选规则，以便可以编辑其任何参数，如规则设置、收件人条件和操作。
  + **删除**按钮将删除所选规则。系统将提示您确认此操作不可逆。
  + **创建规则**按钮将允许您创建新规则，并将其添加到当前规则集。

# 操作选项
<a name="receiving-email-action"></a>

Amazon SES 电子邮件接收的每个接收规则都包含一组有序操作。本部分介绍每个操作类型的具体选项。

有以下操作类型：
+ [添加标头操作](receiving-email-action-add-header.md)
+ [返回退回邮件响应操作](receiving-email-action-bounce.md)
+ [调用 Lambda 函数操作](receiving-email-action-lambda.md)
+ [交付到 S3 存储桶操作](receiving-email-action-s3.md)
+ [发布到 Amazon SNS 主题操作](receiving-email-action-sns.md)
+ [停止规则集操作](receiving-email-action-stop.md)
+ [集成 Amazon WorkMail 操作](receiving-email-action-workmail.md)

# 添加标头操作
<a name="receiving-email-action-add-header"></a>

**Add Header** 操作向收到的电子邮件添加一个自定义标头。此操作通常仅与另一个操作结合使用。此操作具有以下选项。
+ **标头名称**：要添加的标头的名称。必须介于 1 到 50 个字符（含）之间，并且只能包含字母数字（a-z、A-Z、0-9）字符和短划线。
+ **标头值**：要添加的标头的值。必须少于 2048 个字符，并且不能包含换行符（“\$1r”或“\$1n”）。

# 返回退回邮件响应操作
<a name="receiving-email-action-bounce"></a>

**Bounce (退回邮件)** 操作通过将退回邮件响应返回给发件人来拒绝电子邮件，并通过 Amazon SNS 通知您（可选）。此操作具有以下选项。
+ **SMTP Reply Code**：根据 [RFC 5321](https://tools.ietf.org/html/rfc5321) 定义的 SMTP 回复代码。
+ **SMTP Status Code**：根据 [RFC 3463](https://tools.ietf.org/html/rfc3463) 定义的 SMTP 增强状态代码。
+ **Message**：要包含在退回邮件中的用户可读文本。
+ **Reply Sender (回复发件人)**：退回电子邮件的发件人电子邮件地址。这是将从中发送退回邮件的地址。它必须使用 Amazon SES 验证。
**注意**  
退回消息不是通过您的自定义 MAIL FROM 域发送的，而是由 SES 内部生成并仅使用 `amazonses.com` DKIM 签名进行签名。作为解决方法，使用**回复发件人**选项为您的退回消息设置一个电子邮件地址。请参阅此 [AWS re:Post 文章](https://repost.aws/questions/QURvN-26L_SJOcY9JoSFgCdg/ses-receiving-return-bounce-response-action-not-sending-bounce)以获取更多信息。
+ **SNS Topic（SNS 主题）**：在退回电子邮件发送后可选择通知的 Amazon SNS 主题的名称或 ARN。Amazon SNS 主题 ARN 的示例如：*arn:aws:sns:us-east-1:123456789012:MyTopic*。您也可以在设置操作时通过选择 **Create SNS Topic**（创建 SNS 主题）来创建 Amazon SNS 主题。有关 Amazon SNS 主题的更多信息，请参阅 [Amazon Simple Notification Service 开发人员指南](https://docs.aws.amazon.com/sns/latest/dg/CreateTopic.html)。
**注意**  
您选择的 Amazon SNS 主题必须与用于接收电子邮件的 Amazon SES 端点位于同一 AWS 区域中。

您可以在这些字段中键入您自己的值，也可以选择模板，根据退回邮件的原因填充 SMTP Reply Code、SMTP Status Code 和 Message 字段的值。可用模板如下：
+ **Mailbox Does Not Exist**：SMTP Reply Code = 550，SMTP Status Code = 5.1.1
+ **Message Too Large**：SMTP Reply Code = 552，SMTP Status Code = 5.3.4
+ **Mailbox Full (邮箱已满)**：SMTP 回复代码 = 552、SMTP 状态代码 = 5.2.2
+ **Message Content Rejected**：SMTP Reply Code = 500，SMTP Status Code = 5.6.1
+ **Unknown Failure**：SMTP Reply Code = 554，SMTP Status Code = 5.0.0
+ **Temporary Failure**：SMTP Reply Code = 450，SMTP Status Code = 4.0.0

有关在字段中键入自定义值时可能使用的其他退回邮件代码，请参阅 [RFC 3463](https://tools.ietf.org/html/rfc3463)。

# 调用 Lambda 函数操作
<a name="receiving-email-action-lambda"></a>

Lambda 操作通过 Lambda 函数调用您的代码，并通过 Amazon SNS 通知您（可选）。此规则操作具有以下选项和要求：

**选项**
+ **Lambda function (Lambda 函数)** – Lambda 函数的 ARN。*Lambda 函数 ARN 的一个例子是 arn: aws: lambda: us-east-1: account-id: function:。MyFunction*
+ **Invocation type (调用类型)** – Lambda 函数的调用类型。调用类型为**RequestResponse**意味着函数的执行会立即得到响应。调用类型 **Event** 意味着该函数是异步调用的。我们建议您使用 **Event** 调用类型，除非您的使用案例中必需同步执行。

  有一个 30 秒的 **RequestResponse** 调用超时时间。

  有关更多信息，请参阅 *AWS Lambda 开发人员指南*中的[调用 Lambda 函数](https://docs.aws.amazon.com/lambda/latest/dg/lambda-invocation.html)。
+ **SNS Topic (SNS 主题)** – 在触发指定的 Lambda 函数时发出通知的 Amazon SNS 主题的名称或 ARN。*亚马逊 SNS 话题 ARN 的一个例子是 arn: aws: sns: us-east-1:123456789012:。MyTopic*有关更多信息，请参阅 *Amazon Simple Notification Service 开发人员指南*中的[创建 Amazon SNS 主题](https://docs.aws.amazon.com/sns/latest/dg/CreateTopic.html)。

**要求**
+ 您选择的 Lambda 函数必须与您用于接收电子邮件的 Amazon SES 终端节点位于同一 AWS 区域。
+ 您选择的 Amazon SNS 主题必须与您用于接收电子邮件的 Amazon SES 终端节点位于同一 AWS 区域。

## 编写 Lambda 函数
<a name="receiving-email-action-lambda-function"></a>

处理电子邮件时，可以异步调用 Lambda 函数（即使用 `Event` 调用类型）。传递给 Lambda 函数的事件对象将包含与入站电子邮件事件有关的元数据。您还可以使用元数据从 Amazon S3 存储桶访问消息内容。

如果需要实际控制邮件流，则必须同步调用 Lambda 函数（即使用 `RequestResponse` 调用类型），并且 Lambda 函数必须用两个参数调用 `callback` 方法：第一个参数是 `null`，第二个参数是 `disposition` 属性，它的值设置为 `STOP_RULE`、`STOP_RULE_SET` 或 `CONTINUE`。如果第二个参数为 `null` 或没有有效的 `disposition` 属性，则邮件流将继续，并处理接下来的操作和规则，这与 `CONTINUE` 相同。

例如，您可以通过在 Lambda 函数代码的结尾写入以下行来停止接收规则集：

```
callback( null, { "disposition" : "STOP_RULE_SET" });
```

有关 AWS Lambda 代码示例，请参阅[Lambda 函数示例](receiving-email-action-lambda-example-functions.md)。有关高级使用案例的示例，请参阅[使用案例示例](receiving-email-action-lambda-example-use-cases.md)。

### 输入格式
<a name="receiving-email-action-lambda-input"></a>

Amazon SES 以 JSON 格式向 Lambda 函数传送信息。顶级对象包含一个 `Records` 数组，其中包含属性 `eventSource`、`eventVersion` 和 `ses`。`ses` 对象包含 `receipt` 和 `mail` 对象，这些对象的格式与[通知内容](receiving-email-notifications-contents.md)中所述的 Amazon SNS 通知中的格式完全相同。

Amazon SES 传递给 Lambda 的数据包括有关邮件的元数据，以及多个电子邮件标头。但是，不包含邮件的正文。

下面是 Amazon SES 提供给 Lambda 函数的输入结构的概括视图。

```
{
   "Records": [
      {
        "eventSource": "aws:ses",
        "eventVersion": "1.0",
        "ses": {
           "receipt": {
               <same contents as SNS notification>
            },
           "mail": {
               <same contents as SNS notification>
           }
         }
     }
   ]
}
```

### 返回值
<a name="receiving-email-action-lambda-function-return-values"></a>

您的 Lambda 函数可以通过返回以下值之一来控制邮件流：
+ `STOP_RULE` – 当前接收规则中没有进一步操作需要处理，但可以处理后续的接收规则。
+ `STOP_RULE_SET` – 没有后续操作或接收规则需要处理。
+ `CONTINUE` 或任何其他无效值 – 这意味着可以处理后续操作和接收规则。

**Topics**
+ [编写 Lambda 函数](#receiving-email-action-lambda-function)
+ [传入电子邮件事件示例](receiving-email-action-lambda-event.md)
+ [使用案例示例](receiving-email-action-lambda-example-use-cases.md)
+ [Lambda 函数示例](receiving-email-action-lambda-example-functions.md)

# 传入电子邮件事件示例
<a name="receiving-email-action-lambda-event"></a>

有两种方法可以将传入的电子邮件事件发送到 Lambda 函数。第一种方法是使用接收规则中的 Lambda 操作将事件记录直接发送到该函数。第二种方法是使用接收规则中的 Amazon SNS 操作将事件记录发送到 Amazon SNS，然后将 Lambda 函数添加为 Amazon SNS 主题的订阅终端节点。

本节包含 Amazon SES 可以发送到 Lambda 的事件记录的示例。您可以使用这些示例来创建和测试 Lambda 函数。

**注意**  
本部分中的示例包括换行符，以便于阅读。如果您复制本节中的示例，则应删除换行符以生成有效的 JSON 对象。

## Lambda 操作提供的事件记录
<a name="receiving-email-action-lambda-event-lambdaaction"></a>

当您向接收规则添加 Lambda 操作时，Amazon SES 会在每次收到传入消息时向 Lambda 发送事件记录。此事件包含有关传入消息的多个电子邮件标头的信息，以及 Amazon SES 对传入消息执行的多个测试的结果。但是，它会省略传入消息的正文。

以下示例显示了这些事件记录通常包含的值。

```
{
  "Records": [{
    "eventSource": "aws:ses",
    "eventVersion": "1.0",
    "ses": {
      "mail": {
        "timestamp": "2019-08-05T21:30:02.028Z",
        "source": "prvs=144d0cba7=sender@example.com",
        "messageId": "EXAMPLE7c191be45-e9aedb9a-02f9-4d12-a87d-dd0099a07f8a-000000",
        "destination": ["recipient@example.com"],
        "headersTruncated": false,
        "headers": [{
          "name": "Return-Path",
          "value": "<prvs=144d0cba7=sender@example.com>"
        }, {
          "name": "Received",
          "value": "from smtp.example.com [203.0.113.0]) by inbound-smtp.us-east-1.amazonaws.com 
                    with SMTP id bsvpsoklfhu7u50iur7h0kk9a2ou0r7iexample for recipient@example.com;
                    Mon, 05 Aug 2019 21:30:02 +0000 (UTC)"
        }, {
          "name": "X-SES-Spam-Verdict",
          "value": "PASS"
        }, {
          "name": "X-SES-Virus-Verdict",
          "value": "PASS"
        }, {
          "name": "Received-SPF",
          "value": "pass (spfCheck: domain of example.com designates 203.0.113.0 as permitted sender) 
                    client-ip=203.0.113.0; envelope-from=prvs=144d0cba42=sender@example.com; helo=
                    smtp.example.com;"
        }, {
          "name": "Authentication-Results",
          "value": "amazonses.com; spf=pass (spfCheck: domain of example.com designates 203.0.113.0
                    as permitted sender) client-ip=203.0.113.0; envelope-from=prvs=144d0cba42=
                    sender@example.com; helo=smtp.example.com; dkim=pass header.i=@example.com; 
                    dmarc=none header.from=example.com;"
        }, {
          "name": "X-SES-RECEIPT",
          "value": "AEFBQUFBQUFBQUFHbFo0VU81VzVuYmRDNm51nhTVWpabDh6J4V2l5cG5PSHFtNzlBeUk90example"
        }, {
          "name": "X-SES-DKIM-SIGNATURE",
          "value": "a=rsa-sha256; q=dns/txt; b=Cm1emU30VcD6example=; c=relaxed/simple; s=6gbrjpgwjs
                    5zn6fwqknexample; d=amazonses.com; t=1567719002; v=1; bh=DSofsjAoUvyZj6YsBDP5en
                    pRO1otGb7Nes0Qexample=; h=From:To:Cc:Bcc:Subject:Date:Message-ID:MIME-Version:
                    Content-Type:X-SES-RECEIPT;"
        }, {
          "name": "DKIM-Signature",
          "value": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=example.com; i=@example.com; q=dns/txt; 
                    s=example12345; t=1567719001; x=1599255001; h=from:to:subject:date:message-id:
                    references:in-reply-to:mime-version; bh=sjAoUvyZj6YsBDP5enpRO1otGb7s0Qexample=; 
                    b=EQw2D4RLOW2IHE9OgfEA4WXp+AENJtaD2+63wmd5J+d+t/xoaiKUGClOS7WhpyOmlipryOz+iOhxU
                    v350xJIHjLTi9Jsnlw76mRK8o4770TaUz620joCVN21n4cxsrRZpv+1kS0EcAxaF30pmwlni+XT4ems
                    Vxn7zO0I8example=;"
        }, {
          "name": "Received",
          "value": "from mail.example.com (mail.example.com [203.0.113.0]) by email-inbound-relay-
                    1d-9ec21598.us-east-1.example.com (Postfix) with ESMTPS id 57F83A2042 for 
                    <recipient@example.com>; Mon, 5 Aug 2019 21:29:58 +0000 (UTC)"
        }, {
          "name": "From",
          "value": "\"Doe, John\" <sender@example.com>"
        }, {
          "name": "To",
          "value": "\"recipient@example.com\" <recipient@example.com>"
        }, {
          "name": "Subject",
          "value": "This is a test"
        }, {
          "name": "Thread-Topic",
          "value": "This is a test"
        }, {
          "name": "Thread-Index",
          "value": "AQHVZDAaQ58yKI8q7kaAjkhC5stGexample"
        }, {
          "name": "Date",
          "value": "Mon, 5 Aug 2019 21:29:57 +0000"
        }, {
          "name": "Message-ID",
          "value": "<F8098FDD-49A3-442D-9935-F6112example@example.com>"
        }, {
          "name": "References",
          "value": "<1FCED16B-F6B0-4506-A6F0-594DFexample@example.com>"
        }, {
          "name": "In-Reply-To",
          "value": "<1FCED16B-F6B0-4506-A6F0-594DFexample@example.com>"
        }, {
          "name": "Accept-Language",
          "value": "en-US"
        }, {
          "name": "Content-Language",
          "value": "en-US"
        }, {
          "name": "X-MS-Has-Attach",
          "value": ""
        }, {
          "name": "X-MS-TNEF-Correlator",
          "value": ""
        }, {
          "name": "x-ms-exchange-messagesentrepresentingtype",
          "value": "1"
        }, {
          "name": "x-ms-exchange-transport-fromentityheader",
          "value": "Hosted"
        }, {
          "name": "x-originating-ip",
          "value": "[203.0.113.0]"
        }, {
          "name": "Content-Type",
          "value": "multipart/alternative; boundary=\"_000_F8098FDD49A344F6112B195BDAexamplecom_\""
        }, {
          "name": "MIME-Version",
          "value": "1.0"
        }, {
          "name": "Precedence",
          "value": "Bulk"
        }],
        "commonHeaders": {
          "returnPath": "prvs=144d0cba7=sender@example.com",
          "from": ["\"Doe, John\" <sender@example.com>"],
          "date": "Mon, 5 Aug 2019 21:29:57 +0000",
          "to": ["\"recipient@example.com\" <recipient@example.com>"],
          "messageId": "<F8098FDD-49A3-442D-9935-F6112B195BDA@example.com>",
          "subject": "This is a test"
        }
      },
      "receipt": {
        "timestamp": "2019-08-05T21:30:02.028Z",
        "processingTimeMillis": 1205,
        "recipients": ["recipient@example.com"],
        "spamVerdict": {
          "status": "PASS"
        },
        "virusVerdict": {
          "status": "PASS"
        },
        "spfVerdict": {
          "status": "PASS"
        },
        "dkimVerdict": {
          "status": "PASS"
        },
        "dmarcVerdict": {
          "status": "GRAY"
        },
        "action": {
          "type": "Lambda",
          "functionArn": "arn:aws:lambda:us-east-1:123456789012:function:IncomingEmail",
          "invocationType": "Event"
        }
      }
    }
  }]
}
```

## Amazon SNS 操作提供的事件记录
<a name="receiving-email-action-lambda-event-snsaction"></a>

当您向接收规则添加 Amazon SNS 操作时，通知将包含电子邮件的全部内容。如果您希望 Lambda 函数处理电子邮件的正文，则应该在接收规则中添加 Amazon SNS 操作，然后在 Amazon SNS 中，将您的 Lambda 函数订阅到 Amazon SNS 函数。此配置会导致您的 Lambda 函数在收到 Amazon SNS 主题通知时被激活。

```
{
    'Records': [
        {
            'EventSource': 'aws:sns',
            'EventVersion': '1.0',
            'EventSubscriptionArn': 'arn:aws:sns:us-east-1:123456789012:IncomingEmail:12345678',
            'Sns': {
                'Type': 'Notification',
                'MessageId': 'EXAMPLE7c191be45-e9aedb9a-02f9-4d12-a87d-dd0099a07f8a-000000',
                'TopicArn': 'arn:aws:sns:us-east-1:123456789012:IncomingEmail',
                'Subject': 'Amazon SES Email Receipt Notification',
                'Message': <message content—see below>,
                'Timestamp': '2019-09-06T18:52:16.076Z',
                'SignatureVersion': '1',
                'Signature': '012345678901example==',
                'SigningCertUrl': 'https://sns.us-east-1.amazonaws.com/SimpleNotificationService
                                   -01234567890123456789012345678901.pem',
                'UnsubscribeUrl': 'https://sns.us-east-1.amazonaws.com/?Action=Unsubscribe&
                                   SubscriptionArn=arn:aws:sns:us-east-1:0123456789012:IncomingEmail:
                                   0b863538-3f32-462e-9c89-8d8e0example',
                'MessageAttributes': {}
            }
        }
    ]
}
```

该 `Message` 属性包含 JSON 编码的字符串。该字符串包含消息的标头和内容。消息正文本身采用 Base64 编码。如果您希望在 Lambda 函数中使用消息正文，则首先必须解码 `Message` 属性，然后解码 `Content` 对象。

以下示例显示了 `Message` 属性中包含的值。

```
{
  "notificationType": "Received",
  "mail": {
    "timestamp": "2019-09-06T18:52:14.965Z",
    "source": "0100016d07eb7477-8e1938ce-475e-4e4b-89cb-example-000000@amazonses.com",
    "messageId": "12345678901example",
    "destination": ["recipient@example.com"],
    "headersTruncated": false,
    "headers": [{
      "name": "Return-Path",
      "value": "<0100016d07eb7477-8e1938ce-475e-4e4b-89cb-example-000000@amazonses.com>"
    }, {
      "name": "Received",
      "value": "from a1-23.smtp-out.amazonses.com (a1-23.smtp-out.amazonses.com [203.0.113.0]) by
                inbound-smtp.us-east-1.amazonaws.com with SMTP id
                12345678901example for recipient@example.com; Fri, 06 Sep 2019
                18:52:14 +0000 (UTC)"
    }, {
      "name": "X-SES-Spam-Verdict",
      "value": "PASS"
    }, {
      "name": "X-SES-Virus-Verdict",
      "value": "PASS"
    }, {
      "name": "Received-SPF",
      "value": "pass (spfCheck: domain of amazonses.com designates 203.0.113.0 as permitted sender)
                client-ip=203.0.113.0; envelope-from=0100016d07eb7477-8e1938ce-475e-4e4b-89cb-example
                -000000@amazonses.com; helo=a1-23.smtp-out.amazonses.com;"
    }, {
      "name": "Authentication-Results",
      "value": "amazonses.com; spf=pass (spfCheck: domain of amazonses.com designates 203.0.113.0
                as permitted sender) client-ip=203.0.113.0; envelope-from=0100016d07eb7477-8e1938ce
                -475e-4e4b-89cb-example-000000@amazonses.com; helo=a1-23.smtp-out.amazonses.com;
                dkim=pass header.i=@amazonses.com; dmarc=none header.from=example.com;"
    }, {
      "name": "X-SES-RECEIPT",
      "value": "AEFBQUFBQUFBQUFFQkx0QUJZZENEXAMPLE="
    }, {
      "name": "X-SES-DKIM-SIGNATURE",
      "value": "a=rsa-sha256; q=dns/txt; b=d5azwgA2iBqAjA4NBm1ARzjJ95raRmy4G84iVdd3x2JzSHeUnQuTuLmJ
                AqRrYY3WpMIVRFy01hITaguCVjUPWBR0xF6fCEXH85cf3RNeFQyLfWZqoXKfBdjFRV+13troDterH2MxBUL
                8rjzcvdHetl0ImwlaK2PGmePTexample=; c=relaxed/simple; s=EXAMPLE7c191be45-e9aedb9a-02
                f9-4d12-a87d-dd0099a07f8a-000000; d=amazonses.com; t=1567795935; v=1; bh=CZ1SghsYaA
                6SSCbitzsLISeFoNlpdtH1Pyiexample=; h=From:To:Cc:Bcc:Subject:Date:Message-ID:MIME-
                Version:Content-Type:X-SES-RECEIPT;"
    }, {
      "name": "DKIM-Signature",
      "value": "v=1; a=rsa-sha256; q=dns/txt; c=relaxed/simple; s=EXAMPLE7c191be45-e9aedb9a-02f9-
                4d12-a87d-dd0099a07f8a-000000; d=amazonses.com; t=1567795934; h=From:To:Subject:
                MIME-Version:Content-Type:Message-ID:Date:Feedback-ID; bh=CZ1SghsYaA6SSCbitzsLISeFo
                NlpdtH1Pyiexample=; b=L6VXqR1PSN/FYqJI/VAfPRKFgtakcHCYJvuJqVYbuJT8I3FOhqOvkbcgHxOgs
                woxPfvGrL6S53H8Er5Do/CPvOM4Tx3ilE+a0GTYVLjKmwltNeN09YWlJAoqG5KMQPZUxRYaNvYPInLzUdGi
                rdjkbSIgZEnrvq5MzaMWexample="
    }, {
      "name": "From",
      "value": "sender@example.com"
    }, {
      "name": "To",
      "value": "recipient@example.com"
    }, {
      "name": "Subject",
      "value": "Amazon SES Test"
    }, {
      "name": "MIME-Version",
      "value": "1.0"
    }, {
      "name": "Content-Type",
      "value": "multipart/alternative;  boundary=\"----=_Part_869787_396523212.15677example\""
    }, {
      "name": "Message-ID",
      "value": "<0100016d07eb7477-8e1938ce-475e-4e4b-89cb-example-000000@email.amazonses.com>"
    }, {
      "name": "Date",
      "value": "Fri, 6 Sep 2019 18:52:14 +0000"
    }, {
      "name": "X-SES-Outgoing",
      "value": "2019.09.06-203.0.113.0"
    }, {
      "name": "Feedback-ID",
      "value": "1.us-east-1.ZitRoTk0xziun8WEJevt+cSJ17QNuCwulg2D2v3nrT0=:AmazonSES"
    }],
    "commonHeaders": {
      "returnPath": "0100016d07eb7477-8e1938ce-475e-4e4b-89cb-example-000000@amazonses.com",
      "from": ["sender@example.com"],
      "date": "Fri, 6 Sep 2019 18:52:14 +0000",
      "to": ["recipient@example.com"],
      "messageId": "<0100016d07eb7477-8e1938ce-475e-4e4b-89cb-example-000000@email.amazonses.com>",
      "subject": "Amazon SES Test"
    }
  },
  "receipt": {
    "timestamp": "2019-09-06T18:52:14.965Z",
    "processingTimeMillis": 1098,
    "recipients": ["recipient@example.com"],
    "spamVerdict": {
      "status": "PASS"
    },
    "virusVerdict": {
      "status": "PASS"
    },
    "spfVerdict": {
      "status": "PASS"
    },
    "dkimVerdict": {
      "status": "GRAY"
    },
    "dmarcVerdict": {
      "status": "GRAY"
    },
    "action": {
      "type": "SNS",
      "topicArn": "arn:aws:sns:us-east-1:123456789012:IncomingEmail",
      "encoding": "BASE64"
    }
  },
  "content": "UmV0dXJuLVBhdGg6IDwwMTAwMDE2ZDA3ZWI3NDc3LThlMTkzOGNlLTQ3NWUtNGU0Yi04OWNiLWV4YW1wbGUtM
              DAwMDAwQGFtYXpvbnNlcy5jb20+ClJlY2VpdmVkOiBmcm9tIGExLTIzLnNtdHAtb3V0LmFtYXpvbnNlcy5jb2
              0gKGExLTIzLnNtdHAtb3V0LmFtYXpvbnNlcy5jb20gWzIwMy4wLjExMy4wXSkKIGJ5IGluYm91bmQtc210cC5
              1cy1lYXN0LTEuYW1hem9uYXdzLmNvbSB3aXRoIFNNVFAgaWQgZW5xMTBpYW1lMXFjdTMxamg1ZGEyZ244OWlt
              dm90Mms2ZXhhbXBsZQogZm9yIHJlY2lwaWVudEBleGFtcGxlLmNvbTsKIEZyaSwgMDYgU2VwIDIwMTkgMTg6N
              TI6MTQgKzAwMDAgKFVUQykKWC1TRVMtU3BhbS1WZXJkaWN0OiBQQVNTClgtU0VTLVZpcnVzLVZlcmRpY3Q6IF
              BBU1MKUmVjZWl2ZWQtU1BGOiBwYXNzIChzcGZDaGVjazogZG9tYWluIG9mIGFtYXpvbnNlcy5jb20gZGVzaWd
              uYXRlcyAyMDMuMC4xMTMuMCBhcyBwZXJtaXR0ZWQgc2VuZGVyKSBjbGllbnQtaXA9MjAzLjAuMTEzLjA7IGVu
              dmVsb3BlLWZyb209MDEwMDAxNmQwN2ViNzQ3Ny04ZTE5MzhjZS00NzVlLTRlNGItODljYi1leGFtcGxlLTAwM
              DAwMEBhbWF6b25zZXMuY29tOyBoZWxvPWExLTIzLnNtdHAtb3V0LmFtYXpvbnNlcy5jb207CkF1dGhlbnRpY2
              F0aW9uLVJlc3VsdHM6IGFtYXpvbnNlcy5jb207CiBzcGY9cGFzcyAoc3BmQ2hlY2s6IGRvbWFpbiBvZiBhbWF
              6b25zZXMuY29tIGRlc2lnbmF0ZXMgMjAzLjAuMTEzLjAgYXMgcGVybWl0dGVkIHNlbmRlcikgY2xpZW50LWlw
              PTIwMy4wLjExMy4wOyBlbnZlbG9wZS1mcm9tPTAxMDAwMTZkMDdlYjc0NzctOGUxOTM4Y2UtNDc1ZS00ZTRiL
              Tg5Y2ItZXhhbXBsZS0wMDAwMDBAYW1hem9uc2VzLmNvbTsgaGVsbz1hMS0yMy5zbXRwLW91dC5hbWF6b25zZX
              MuY29tOwogZGtpbT1wYXNzIGhlYWRlci5pPUBhbWF6b25zZXMuY29tOwogZG1hcmM9bm9uZSBoZWFkZXIuZnJ
              vbT1leGFtcGxlLmNvbTsKWC1TRVMtUkVDRUlQVDogQUVGQlFVRkJRVUZCUVVGRlFreDBRVUpaWkVORVhBTVBM
              RT0KWC1TRVMtREtJTS1TSUdOQVRVUkU6IGE9cnNhLXNoYTI1NjsgcT1kbnMvdHh0OyBiPWQ1YXp3Z0EyaUJxQ
              WpBNE5CbTFBUnpqSjk1cmFSbXk0Rzg0aVZkZDN4Mkp6U0hlVW5RdVR1TG1KQXFScllZM1dwTUlWUkZ5MDFoSV
              RhZ3VDVmpVUFdCUjB4RjZmQ0VYSDg1Y2YzUk5lRlF5TGZXWnFvWEtmQmRqRlJWKzEzdHJvRHRlckgyTXhCVUw
              4cmp6Y3ZkSGV0bDBJbXdsYUsyUEdtZVBUZXhhbXBsZT07IGM9cmVsYXhlZC9zaW1wbGU7IHM9RVhBTVBMRTdj
              MTkxYmU0NS1lOWFlZGI5YS0wMmY5LTRkMTItYTg3ZC1kZDAwOTlhMDdmOGEtMDAwMDAwOyBkPWFtYXpvbnNlc
              y5jb207IHQ9MTU2Nzc5NTkzNTsgdj0xOyBiaD1DWjFTZ2hzWWFBNlNTQ2JpdHpzTElTZUZvTmxwZHRIMVB5aW
              V4YW1wbGU9OyBoPUZyb206VG86Q2M6QmNjOlN1YmplY3Q6RGF0ZTpNZXNzYWdlLUlEOk1JTUUtVmVyc2lvbjp
              Db250ZW50LVR5cGU6WC1TRVMtUkVDRUlQVDsKREtJTS1TaWduYXR1cmU6IHY9MTsgYT1yc2Etc2hhMjU2OyBx
              PWRucy90eHQ7IGM9cmVsYXhlZC9zaW1wbGU7CglzPUVYQU1QTEU3YzE5MWJlNDUtZTlhZWRiOWEtMDJmOS00Z
              DEyLWE4N2QtZGQwMDk5YTA3ZjhhLTAwMDAwMDsgZD1hbWF6b25zZXMuY29tOyB0PTE1Njc3OTU5MzQ7CgloPU
              Zyb206VG86U3ViamVjdDpNSU1FLVZlcnNpb246Q29udGVudC1UeXBlOk1lc3NhZ2UtSUQ6RGF0ZTpGZWVkYmF
              jay1JRDsKCWJoPUNaMVNnaHNZYUE2U1NDYml0enNMSVNlRm9ObHBkdEgxUHlpTWV4YW1wbGU9OwoJYj1leGFt
              cGxlPQpGcm9tOiBzZW5kZXJAZXhhbXBsZS5jb20KVG86IHJlY2lwaWVudEBleGFtcGxlLmNvbQpTdWJqZWN0O
              iBBbWF6b24gU0VTIFRlc3QKTUlNRS1WZXJzaW9uOiAxLjAKQ29udGVudC1UeXBlOiBtdWx0aXBhcnQvYWx0ZX
              JuYXRpdmU7IAoJYm91bmRhcnk9Ii0tLS09X1BhcnRfODY5Nzg3XzM5NjUyMzIxMi4xNTY3N2V4YW1wbGUiCk1
              lc3NhZ2UtSUQ6IDwwMTAwMDE2ZDA3ZWI3NDc3LThlMTkzOGNlLTQ3NWUtNGU0Yi04OWNiLWV4YW1wbGUtMDAw
              MDAwQGVtYWlsLmFtYXpvbnNlcy5jb20+CkRhdGU6IEZyaSwgNiBTZXAgMjAxOSAxODo1MjoxNCArMDAwMApYL
              VNFUy1PdXRnb2luZzogMjAxOS4wOS4wNi0yMDMuMC4xMTMuMApGZWVkYmFjay1JRDogMS51cy1lYXN0LTEuWm
              l0Um9UazB4eml1bjhXRUpldnQrZXhhbXBsZT06QW1hem9uU0VTCgotLS0tLS09X1BhcnRfODY5Nzg3XzM5NjU
              yMzIxMi4xNTY3N2V4YW1wbGUKQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04CkNvbnRl
              bnQtVHJhbnNmZXItRW5jb2Rpbmc6IDdiaXQKCkFtYXpvbiBTRVMgVGVzdApUaGlzIGVtYWlsIHdhcyBzZW50I
              HdpdGggQW1hem9uIFNFUy4KLS0tLS0tPV9QYXJ0Xzg2OTc4N18zOTY1MjMyMTIuMTU2NzdleGFtcGxlCkNvbn
              RlbnQtVHlwZTogdGV4dC9odG1sOyBjaGFyc2V0PVVURi04CkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDd
              iaXQKCjxodG1sPgo8aGVhZD48L2hlYWQ+Cjxib2R5PgogIDxoMT5BbWF6b24gU0VTIFRlc3Q8L2gxPgogIDxw
              PlRoaXMgZW1haWwgd2FzIHNlbnQgd2l0aCBBbWF6b24gU0VTLjwvcD4KPGltZyBhbHQ9IiIgc3JjPSJodHRwO
              i8vZXhhbXBsZS5yLnVzLWVhc3QtMS5hd3N0cmFjay5tZS9JMC8wMTAwMDE2ZDA3ZWI3NDc3LThlMTkzOGNlLT
              Q3NWUtNGU0Yi04OWNiLWV4YW1wbGUtMDAwMDAwL3UtWUphaHRkTTJTclhZQ2QiIHN0eWxlPSJkaXNwbGF5OiB
              ub25lOyB3aWR0aDogMXB4OyBoZWlnaHQ6IDFweDsiPgo8L2JvZHk+CjwvaHRtbD4KICAgICAgICAgICAgCi0t
              LS0tLT1fUGFydF84Njk3ODdfMzk2NTIzMjEyLjE1Njc3ZXhhbXBsZS0tCg=="
}
```

# 使用案例示例
<a name="receiving-email-action-lambda-example-use-cases"></a>

以下示例简要介绍您可以设置的一些规则，以使用 Lambda 函数结果控制邮件流。为方便演示，这些示例多数使用 S3 操作作为结果。

## 使用案例 1：删除所有域中的垃圾邮件
<a name="receiving-email-action-lambda-example-use-cases-1"></a>

本示例演示在您的所有域中删除垃圾邮件的全局规则。规则 2 和规则 3 表示您可以在所有域中删除垃圾邮件后应用特定于域的规则。

### 规则 1
<a name="receiving-email-action-lambda-example-use-cases-1-rule-1"></a>

*收件人列表：*空。因此，此规则将应用到您的所有已验证域下的所有收件人。

 *操作* 

1. 如果电子邮件为垃圾邮件，Lambda 操作 (同步) 返回 `STOP_RULE_SET`。否则返回 `CONTINUE`。请参阅[Lambda 函数示例](receiving-email-action-lambda-example-functions.md)中用于删除垃圾邮件的示例 Lambda 函数。

### 规则 2
<a name="receiving-email-action-lambda-example-use-cases-1-rule-2"></a>

*收件人列表：*example1.com

 *操作* 

1. 任何操作。

### 规则 3
<a name="receiving-email-action-lambda-example-use-cases-1-rule-3"></a>

*收件人列表：*example2.com

 *操作* 

1. 任何操作。

## 使用案例 2：退回所有域中的垃圾邮件
<a name="receiving-email-action-lambda-example-use-cases-2"></a>

本示例演示在您的所有域中退回垃圾邮件的全局规则。规则 2 和规则 3 表示您可以在所有域中退回垃圾邮件后应用特定于域的规则。

### 规则 1
<a name="receiving-email-action-lambda-example-use-cases-2-rule-1"></a>

*收件人列表：*空。因此，此规则将应用到您的所有已验证域下的所有收件人。

 *操作* 

1. 如果电子邮件为垃圾邮件，Lambda 操作 (同步) 返回 `CONTINUE`。否则返回 `STOP_RULE`。

1. 退回邮件操作 (“500 5.6.1. Message content rejected”)。

1. 停止操作。

### 规则 2
<a name="receiving-email-action-lambda-example-use-cases-2-rule-2"></a>

*收件人列表：*example1.com

 *操作* 

1. 任何操作

### 规则 3
<a name="receiving-email-action-lambda-example-use-cases-2-rule-3"></a>

*收件人列表：*example2.com

 *操作* 

1. 任何操作

## 使用案例 3：应用最具体的规则
<a name="receiving-email-action-lambda-example-use-cases-3"></a>

本示例演示如何使用停止操作防止电子邮件由多条规则进行处理。在此示例中，您有针对一个具体地址的一条规则，以及针对该域中所有电子邮件地址的另一条规则。通过使用停止操作，匹配具体电子邮件地址规则的消息不会由适用于整个域的通用规则进行处理。

### 规则 1
<a name="receiving-email-action-lambda-example-use-cases-3-rule-1"></a>

*收件人列表：*user@example.com

 *操作* 

1. Lambda 操作 (异步)。

1. 停止操作。

### 规则 2
<a name="receiving-email-action-lambda-example-use-cases-3-rule-2"></a>

*收件人列表：*example.com

 *操作* 

1. 任何操作。

## 用例 4：将邮件事件记录到 CloudWatch
<a name="receiving-email-action-lambda-example-use-cases-4"></a>

本示例演示在将邮件保存到 Amazon SES 之前，如何为经过系统的所有邮件保留审计日志。

### 规则 1
<a name="receiving-email-action-lambda-example-use-cases-4-rule-1"></a>

*收件人列表：*example.com

 *操作* 

1. 将事件对象写入日志的 Lambda 操作（异步）。 CloudWatch [Lambda 函数示例](receiving-email-action-lambda-example-functions.md)日志中的 Lambda 函数示例。 CloudWatch

1. S3 操作。

## 使用案例 5：删除 DKIM 失败的邮件
<a name="receiving-email-action-lambda-example-use-cases-5"></a>

本示例演示如何将所有传入电子邮件保存到 Amazon S3 存储桶，但仅将发送给特定电子邮件地址并通过 DKIM 的电子邮件发送到自动运行的电子邮件应用程序。

### 规则 1
<a name="receiving-email-action-lambda-example-use-cases-5-rule-1"></a>

*收件人列表：*example.com

 *操作* 

1. S3 操作。

1. 如果消息 DKIM 失败，Lambda 操作 (同步) 返回 `STOP_RULE_SET`。否则返回 `CONTINUE`。

### 规则 2
<a name="receiving-email-action-lambda-example-use-cases-5-rule-2"></a>

*收件人列表：*support@example.com

 *操作* 

1. 触发自动运行应用程序的 Lambda 操作 (异步)。

## 使用案例 6：基于主题行筛选邮件
<a name="receiving-email-action-lambda-example-use-cases-6"></a>

此示例演示如何删除一个域中主题行包含词语“discount”的所有传入邮件，然后用一种方式处理面向自动系统的邮件，用其他方式处理该域中发送给所有其他收件人的邮件。

### 规则 1
<a name="receiving-email-action-lambda-example-use-cases-6-rule-1"></a>

*收件人列表：*example.com

 *操作* 

1. 如果主题行包含词语“discount”，Lambda 操作 (同步) 返回 `STOP_RULE_SET`。否则返回 `CONTINUE`。

### 规则 2
<a name="receiving-email-action-lambda-example-use-cases-6-rule-2"></a>

*收件人列表：*support@example.com

 *操作* 

1. 存储桶 1 的 S3 操作。

1. 触发自动运行应用程序的 Lambda 操作 (异步)。

1. 停止操作。

### 规则 3
<a name="receiving-email-action-lambda-example-use-cases-6-rule-3"></a>

*收件人列表：*example.com

 *操作* 

1. 存储桶 2 的 S3 操作。

1. Lambda 操作 (异步)，用于处理域中的其他电子邮件。

# Lambda 函数示例
<a name="receiving-email-action-lambda-example-functions"></a>

本主题包含用于控制邮件流的 Lambda 函数的示例。

## 示例 1：删除垃圾邮件
<a name="receiving-email-action-lambda-example-functions-1"></a>

此示例会停止处理包含至少一个垃圾邮件指标的消息。

```
export const handler = async (event, context, callback) => {
    console.log('Spam filter');
    
    const sesNotification = event.Records[0].ses;
    console.log("SES Notification:\n", JSON.stringify(sesNotification, null, 2));
    
    // Check if any spam check failed
    if (sesNotification.receipt.spfVerdict.status === 'FAIL'
            || sesNotification.receipt.dkimVerdict.status === 'FAIL'
            || sesNotification.receipt.spamVerdict.status === 'FAIL'
            || sesNotification.receipt.virusVerdict.status === 'FAIL') {
                
        console.log('Dropping spam');

        // Stop processing rule set, dropping message
        callback(null, {'disposition':'STOP_RULE_SET'});
    } else {
        callback(null, {'disposition':'CONTINUE'});   
    }
};
```

## 示例 2：如果找到特定标头，则继续
<a name="receiving-email-action-lambda-example-functions-2"></a>

只有在电子邮件包含特定标头值时，此示例才继续处理当前规则。

```
export const handler = async (event, context, callback) => {
    console.log('Header matcher');
 
    const sesNotification = event.Records[0].ses;
    console.log("SES Notification:\n", JSON.stringify(sesNotification, null, 2));
    
    // Iterate over the headers
    for (let index in sesNotification.mail.headers) {
        const header = sesNotification.mail.headers[index];
        
        // Examine the header values
        if (header.name === 'X-Header' && header.value === 'X-Value') {
            console.log('Found header with value.');
            callback(null, {'disposition':'CONTINUE'});
            return;
        }
    }
    
    // Stop processing the rule if the header value wasn't found
    callback(null, {'disposition':'STOP_RULE'});
};
```

## 示例 3：从 Amazon S3 检索电子邮件
<a name="receiving-email-action-lambda-example-functions-3"></a>

此示例从 Amazon S3 获取原始电子邮件并对其进行处理。

**注意**  
您必须先使用 S3 操作将该电子邮件写入 Amazon S3。
确保 Lambda 函数具有从 S3 存储桶获取对象的 IAM 权限——请参阅此 [AWS re:Post article](https://repost.aws/knowledge-center/lambda-execution-role-s3-bucket) 以获取更多信息。
默认的 Lambda 执行超时时间可能对您的工作流来说太短，考虑增加它们。

```
import { S3Client, GetObjectCommand } from "@aws-sdk/client-s3"; 
const bucketName = '<Your Bucket Name>';

export const handler = async (event, context, callback) => {
    const client = new S3Client();
    console.log('Process email');
  
    var sesNotification = event.Records[0].ses;
    console.log("SES Notification:\n", JSON.stringify(sesNotification, null, 2));
    console.log("MessageId: " + sesNotification.mail.messageId)
  
    const getObjectCommand = new GetObjectCommand({
        Bucket: bucketName,
        Key: sesNotification.mail.messageId
    });
  
    try {
        const response = await client.send(getObjectCommand);
        const receivedMail = await response.Body.transformToString();
        console.log(receivedMail);
        callback(null, {'disposition':'CONTINUE'})
    } catch (e) {
        // Perform error handling here
        console.log("Encountered S3 client error: "+ e, e.stack);
        callback(null, {'disposition':'STOP_RULE_SET'})
    }
};
```

## 示例 4：DMARC 身份验证失败时的退回邮件
<a name="receiving-email-action-lambda-example-functions-4"></a>

如果传入电子邮件的 DMARC 身份验证失败，此示例将发送退回邮件消息。

**注意**  
在使用此示例时，请将 `emailDomain` 环境变量的值设置为您的电子邮件接收域。
确保 Lambda 函数对发送退回消息的 SES 身份具有 `ses:SendBounce` 权限。

```
import { SESClient, SendBounceCommand } from "@aws-sdk/client-ses";
const sesClient = new SESClient();
// Assign the emailDomain environment variable to a constant.
const emailDomain = process.env.emailDomain;

export const handler = async (event, context, callback) => {
    console.log('Spam filter starting');

    const sesNotification = event.Records[0].ses;
    const messageId = sesNotification.mail.messageId;
    const receipt = sesNotification.receipt;

    console.log('Processing message:', messageId);

    // If DMARC verdict is FAIL and the sending domain's policy is REJECT
    // (p=reject), bounce the email.
    if (receipt.dmarcVerdict.status === 'FAIL' 
        && receipt.dmarcPolicy.status === 'REJECT') {
        // The values that make up the body of the bounce message.
        const sendBounceParams = {
            BounceSender: `mailer-daemon@${emailDomain}`,
            OriginalMessageId: messageId,
            MessageDsn: {
                ReportingMta: `dns; ${emailDomain}`,
                ArrivalDate: new Date(),
                ExtensionFields: [],
            },
            // Include custom text explaining why the email was bounced.
            Explanation: "Unauthenticated email is not accepted due to the sending domain's DMARC policy.",
            BouncedRecipientInfoList: receipt.recipients.map((recipient) => ({
                Recipient: recipient,
                // Bounce with 550 5.6.1 Message content rejected
                BounceType: 'ContentRejected',
            })),
        };

        console.log('Bouncing message with parameters:');
        console.log(JSON.stringify(sendBounceParams, null, 2));
        
        const sendBounceCommand = new SendBounceCommand(sendBounceParams);
        
        // Try to send the bounce. 
        try {
          const response = await sesClient.send(sendBounceCommand);
          console.log(response);
          console.log(`Bounce for message ${messageId} sent, bounce message ID: ${response.MessageId}`);
          // Stop processing additional receipt rules in the rule set.
          callback(null, {disposition: 'STOP_RULE_SET'});
        } catch (e) {
          // If something goes wrong, log the issue.
          console.log(`An error occurred while sending bounce for message: ${messageId}`, e);
          // Perform any additional error handling here
          callback(e)
        }
        
    // If the DMARC verdict is anything else (PASS, QUARANTINE or GRAY), accept
    // the message and process remaining receipt rules in the rule set.
    } else {
        console.log('Accepting message:', messageId);
        callback(null, {disposition: 'CONTINUE'});
    }
};
```

# 交付到 S3 存储桶操作
<a name="receiving-email-action-s3"></a>

**传送到 S3 存储桶**操作会将邮件传送到 S3 存储桶，并且可以选择通过 SNS 等方式向您发送通知。此操作具有以下选项。
+ **S3 存储桶** – 用于保存收到的电子邮件的 S3 存储桶的名称。您也可以在设置操作时通过选择**创建 S3 存储桶**来创建新的 S3 存储桶。Amazon SES 为您提供原始、未经修改的电子邮件，通常是多用途 Internet 邮件扩展（MIME）格式。有关 MIME 格式的更多信息，请参阅 [RFC 2045](https://tools.ietf.org/html/rfc2045)。
**重要**  
Amazon S3 存储桶必须存在于 SES [电子邮件接收](regions.md#region-receive-email) 可用的区域；否则，您必须使用下面介绍的 IAM 角色选项。
当您将电子邮件保存到 S3 存储桶时，默认的最大电子邮件大小（包括标头）为 40 MB。
SES 不支持通过已配置默认保留期的对象锁定启用上传至 S3 存储桶的接收规则。
如果通过指定您自己的 KMS 密钥在 S3 桶上应用加密，请确保使用完全限定的 KMS 密钥 ARN，而不是 KMS 密钥别名；使用别名可能导致以属于请求者而非桶管理员的 KMS 密钥对数据进行加密。请参阅[使用加密进行跨账户操作](https://docs.aws.amazon.com/AmazonS3/latest/userguide/bucket-encryption.html#bucket-encryption-update-bucket-policy)。
+ **对象键前缀** – 在 S3 存储桶中使用的可选键名称前缀。您可以通过键名称前缀以文件夹结构组织您的 S3 存储桶。例如，如果您使用 *Email* 作为**对象键前缀**，您的电子邮件将显示在 S3 存储桶中名为 *Email* 的文件夹中。
+ **消息加密** – 在将收到的电子邮件发送到 S3 存储桶之前对其进行加密的选项。
+ **KMS 加密密钥** –（如果选择了*消息加密*，则可用。） SES 应在将电子邮件保存到 S3 存储桶之前用于对其进行加密的 AWS KMS 密钥。您可以使用默认的 KMS 密钥或者您在 KMS 中创建的客户自主管理型密钥。
**注意**  
您选择的 KMS 密钥必须与用于接收电子邮件的 SES 端点位于同一 AWS 区域。
  + 要使用默认 KMS 密钥，请在设置接收规则时在 SES 控制台中选择 **aws/ses**。如果使用 SES API，可以通过提供 `arn:aws:kms:REGION:AWSACCOUNTID:alias/aws/ses` 形式的 ARN 指定默认 KMS 密钥。例如，如果您的 AWS 账户 ID 是 123456789012，并且您想要在 us-east-1 区域中使用默认 KMS 密钥，则默认 KMS 密钥的 ARN 为 `arn:aws:kms:us-east-1:123456789012:alias/aws/ses`。如果您使用默认 KMS 密钥，则不需要执行任何其他步骤来为 SES 提供使用它的权限。
  + 要使用在 KMS 中创建的客户自主管理型密钥，请提供 KMS 密钥的 ARN，并确保在密钥策略中添加一条语句，为 SES 提供使用该密钥的权限。有关提供权限的更多信息，请参阅[授予 Amazon SES 电子邮件接收的权限](receiving-email-permissions.md)。

  有关将 KMS 与 SES 结合使用的更多信息，请参阅《[AWS Key Management Service Developer Guide](https://docs.aws.amazon.com/kms/latest/developerguide/services-ses.html)》。如果您未在控制台或 API 中指定 KMS 密钥，则 SES 将不会加密您的电子邮件。
**重要**  
您的邮件将使用 S3 加密客户端通过 SES 进行加密，然后再提交到 S3 进行存储。它并不使用 S3 服务器端加密进行加密。这意味着，在从 S3 中检索电子邮件后，您必须使用 S3 加密客户端解密电子邮件，因为该服务没有使用 KMS 密钥进行解密的访问权限。此加密客户端可在[适用于 Java 的 AWS SDK](https://aws.amazon.com/sdk-for-java/)和[适用于 Ruby 的 AWS SDK](https://aws.amazon.com/sdk-for-ruby/)中获取。有关更多信息，请参阅 [Amazon Simple Storage Service 用户指南](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingClientSideEncryption.html)。
+ **IAM 角色** – SES 用来访问*传送到 S3* 操作（Amazon S3 存储桶、SNS 主题和 KMS 密钥）中的资源的 IAM 角色。如果未提供，则需要明确授予 SES 单独访问每个资源的权限，请参阅[授予 Amazon SES 电子邮件接收的权限](receiving-email-permissions.md)。

  如果您想向一个位于 SES *电子邮件接收*不可用区域的 S3 存储桶写入数据，则您必须使用一个 IAM 角色，该角色要能够将写入 S3 权限策略作为角色的内联策略。您可以直接从控制台应用此操作的权限策略：

  1. 在 **IAM 角色**字段中选择**创建新角色**，然后输入名称，接着选择**创建角色**。（此角色的 IAM 信任策略将在后台自动生成。）

  1. 由于 IAM 信任策略是自动生成的，因此您只需将操作的权限策略添加到角色中 - 选择 **IAM 角色**字段下的**查看角色**即可打开 IAM 控制台。

  1. 在**权限**选项卡下，选择**添加权限**，然后选择**创建内联策略**。

  1. 在**指定权限**页面上，在**策略编辑器**中选择 **JSON**。

  1. 将权限策略从 [适用于 S3 操作的 IAM 角色权限](receiving-email-permissions.md#receiving-email-permissions-s3-iam-role) 复制并粘贴到**策略编辑器**中，然后将红色文本中的数据替换为您自己的数据。（请务必删除编辑器中的所有示例代码。）

  1. 选择**下一步**。

  1. 选择**创建策略**，查看并创建您的 IAM 角色权限策略。

  1. 选择已打开 SES **创建规则** – **添加操作**页面的浏览器选项卡，然后继续执行创建规则的其余步骤。
+ **SNS 主题** – 在电子邮件保存到 S3 存储桶时发出通知的 Amazon SNS 主题的名称或 ARN。SNS 主题 ARN 的示例：*arn:aws:sns:us-east-1:123456789012:MyTopic*。您也可以在设置操作时通过选择**创建 SNS 主题**来创建 SNS 主题。有关 SNS 主题的更多信息，请参阅《[Amazon Simple Notification Service Developer Guide](https://docs.aws.amazon.com/sns/latest/dg/CreateTopic.html)》。
**注意**  
您选择的 SNS 主题必须与用于接收电子邮件的 SNS 端点位于同一 AWS 区域。
仅对与 SES 接收规则关联的 SNS 主题使用*客户自主管理型* KMS 密钥加密，因为您需要编辑 KMS 密钥策略以允许 SES 发布到 SNS。这与 *AWS 管理的* KMS 密钥策略不同，后者按设计不可编辑。

# 发布到 Amazon SNS 主题操作
<a name="receiving-email-action-sns"></a>

**SNS** 操作使用 Amazon SNS 通知发布邮件。该通知包含完整的电子邮件内容。此操作具有以下选项。
+ **SNS Topic (SNS 主题)** – 发布电子邮件的 Amazon SNS 主题的名称或 ARN。Amazon SNS 通知将包含原始、未经修改的电子邮件副本，通常是多用途 Internet 邮件扩展（MIME）格式。有关 MIME 格式的更多信息，请参阅 [RFC 2045](https://tools.ietf.org/html/rfc2045)。
**重要**  
如果您选择通过 Amazon SNS 通知接收您的电子邮件，则最大电子邮件大小（包括标头）为 150KB。大于此大小的电子邮件将被退回。如果您预计电子邮件将大于此大小，请改为将电子邮件保存到 Amazon S3 存储桶。

  Amazon SNS 主题 ARN 的示例如：*arn:aws:sns:us-east-1:123456789012:MyTopic*。您也可以在设置操作时通过选择 **Create SNS Topic**（创建 SNS 主题）来创建 Amazon SNS 主题。有关 Amazon SNS 主题的更多信息，请参阅 [Amazon Simple Notification Service 开发人员指南](https://docs.aws.amazon.com/sns/latest/dg/CreateTopic.html)。
**注意**  
您选择的 Amazon SNS 主题必须与用于接收电子邮件的 Amazon SES 端点位于同一 AWS 区域中。
仅对与 SES 接收规则关联的 SNS 主题使用*客户自主管理型* KMS 密钥加密，因为您需要编辑 KMS 密钥策略以允许 SES 发布到 SNS。这与 *AWS 管理的* KMS 密钥策略不同，后者按设计不可编辑。
+ **Encoding (编码)** – Amazon SNS 通知中的电子邮件所使用的编码。UTF-8 更易于使用，但如果邮件使用其他编码格式进行编码，可能不会保留所有特殊字符。Base64 保留所有特殊字符。有关 UTF-8 和 Base64 的信息，请分别参阅 [RFC 3629](https://tools.ietf.org/html/rfc3629) 和 [RFC 4648](https://tools.ietf.org/html/rfc4648)。

在您接收电子邮件时，Amazon SES 将执行活动接收规则集中的规则。您可以使用 Amazon SNS 配置接收规则以向您发送通知。您的接收规则可以发送两种不同类型的通知：
+ **从 SNS 操作发送的通知** – 当您将 [SNS](#receiving-email-action-sns) 操作添加到接收规则时，它将发送有关电子邮件以及电子邮件内容的信息。如果邮件为 150KB 或更小，则此通知类型还包括电子邮件的完整 MIME 正文。
+ **从其他操作类型发送的通知** – 当您将任何其他操作类型（包括[退回邮件](receiving-email-action-bounce.md)、[Lambda](receiving-email-action-lambda.md)、[停止规则集](receiving-email-action-stop.md)或 [WorkMail](receiving-email-action-workmail.md) 操作）添加到接收规则时，可以选择指定 Amazon SNS 主题。如果是这样，您将在执行这些操作时收到通知。这些通知包含有关电子邮件的信息，但不包含电子邮件的内容。

**Topics**
+ [Amazon SES 电子邮件接收通知的内容](receiving-email-notifications-contents.md)
+ [Amazon SES 电子邮件接收通知的示例](receiving-email-notifications-examples.md)

# Amazon SES 电子邮件接收通知的内容
<a name="receiving-email-notifications-contents"></a>

所有接收电子邮件的通知都以对象表示法 (JSON) 格式发布到亚马逊简单通知服务 (Amazon SNS) Simple Notification Service 主题 JavaScript 。

有关示例通知，请参阅 [通知示例](receiving-email-notifications-examples.md)

**Contents**
+ [顶级 JSON 对象](#receiving-email-notifications-contents-top-level-json-object)
+ [接收对象](#receiving-email-notifications-contents-receipt-object)
  + [操作对象](#receiving-email-notifications-contents-action-object)
  + [dkimVerdict 对象](#receiving-email-notifications-contents-dkimverdict-object)
  + [dmarcVerdict 对象](#receiving-email-notifications-contents-dmarcverdict-object)
  + [spamVerdict 对象](#receiving-email-notifications-contents-spamverdict-object)
  + [spfVerdict 对象](#receiving-email-notifications-contents-spfverdict-object)
  + [virusVerdict 对象](#receiving-email-notifications-contents-virusverdict-object)
+ [邮件对象](#receiving-email-notifications-contents-mail-object)
  + [commonHeaders 对象](#receiving-email-notifications-contents-mail-object-commonHeaders)

## 顶级 JSON 对象
<a name="receiving-email-notifications-contents-top-level-json-object"></a>

顶级 JSON 对象包含以下字段。


| 字段名称 | 说明 | 
| --- | --- | 
|  notificationType  |  通知类型。对于此通知类型，值始终为 `Received`。  | 
|  [`receipt`](#receiving-email-notifications-contents-receipt-object)  |  包含电子邮件传送信息的对象。  | 
|  [`mail`](#receiving-email-notifications-contents-mail-object)  |  包含与通知关联的电子邮件的相关信息的对象。  | 
|  content  |  包含原始、未修改电子邮件的字符串，通常是多用途 Internet 邮件扩展（MIME）格式。有关 MIME 格式的更多信息，请参阅 [RFC 2045](https://tools.ietf.org/html/rfc2045)。  仅当通知由 SNS 操作触发时才包含此字段。所有其他操作触发的通知不包含此字段。   | 

## 接收对象
<a name="receiving-email-notifications-contents-receipt-object"></a>

`receipt` 对象包含以下字段。


| 字段名称 | 说明 | 
| --- | --- | 
|  [`action`](#receiving-email-notifications-contents-action-object)  |  封装已执行操作的信息的对象。有关可能的值的列表，请参阅[操作对象](#receiving-email-notifications-contents-action-object)。  | 
|  [`dkimVerdict`](#receiving-email-notifications-contents-dkimverdict-object)  |  表示 DomainKeys 已识别邮件 (DKIM) 检查是否通过的对象。有关可能的值的列表，请参阅[dkimVerdict 对象](#receiving-email-notifications-contents-dkimverdict-object)。  | 
| dmarcPolicy | 指示发送域的基于域的邮件身份验证、报告和合规性（DMARC）设置。此字段仅当邮件未通过 DMARC 身份验证时出现。 此字段的值可能为：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/ses/latest/dg/receiving-email-notifications-contents.html) | 
| [`dmarcVerdict`](#receiving-email-notifications-contents-dmarcverdict-object) | 用于指示是否已通过基于域的消息身份验证、报告和合规性（DMARC）检查的对象。有关可能的值的列表，请参阅[dmarcVerdict 对象](#receiving-email-notifications-contents-dmarcverdict-object)。 | 
|  processingTimeMillis  |  用于指定从 Amazon SES 收到消息到触发操作所花费的时间（以毫秒为单位）的字符串。  | 
|  recipients  |  符合有效[接收规则](receiving-email-receipt-rules-console-walkthrough.md)的收件人（具体来说，信封 RCPT TO 地址）。此处列出的地址可能不同于 [邮件对象](#receiving-email-notifications-contents-mail-object)中的 `destination` 字段所列出的地址。  | 
|  [`spamVerdict`](#receiving-email-notifications-contents-spamverdict-object)  |  用于指示消息是否为垃圾邮件的对象。有关可能的值的列表，请参阅[spamVerdict 对象](#receiving-email-notifications-contents-spamverdict-object)。  | 
|  [`spfVerdict`](#receiving-email-notifications-contents-spfverdict-object)  |  用于指示是否已通过发件人策略框架（SPF）检查的对象。有关可能的值的列表，请参阅[spfVerdict 对象](#receiving-email-notifications-contents-spfverdict-object)。  | 
|  timestamp  |  用于指定触发操作的限定日期和时间（采用 [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) 格式）的字符串。  | 
|  [virusVerdict](#receiving-email-notifications-contents-virusverdict-object)  |  用于指示消息是否包含病毒的对象。有关可能的值的列表，请参阅[virusVerdict 对象](#receiving-email-notifications-contents-virusverdict-object)。  | 

### 操作对象
<a name="receiving-email-notifications-contents-action-object"></a>

`action` 对象包含以下字段。


| 字段名称 | 说明 | 
| --- | --- | 
|  type  |  用于指示已执行的操作类型的字符串。可能的值包括 `S3`、`SNS`、`Bounce`、`Lambda`、`Stop` 和 `WorkMail`。  | 
|  topicArn  |  包含发布通知的 Amazon SNS 主题的 Amazon Resource Name (ARN) 的字符串。  | 
|  bucketName  |  包含发布消息的 Amazon S3 存储桶名称的字符串。仅 S3 操作类型存在此字段。  | 
|  objectKey  |  包含在 Amazon S3 存储桶中唯一标识电子邮件的名称的字符串。它与 [邮件对象](#receiving-email-notifications-contents-mail-object)中的 `messageId` 相同。仅 S3 操作类型存在此字段。  | 
|  smtpReplyCode  |  包含根据 [RFC 5321](https://tools.ietf.org/html/rfc5321) 定义的 SMTP 回复代码的字符串。仅退回邮件操作类型存在此字段。  | 
|  statusCode  |  包含根据 [RFC 3463](https://tools.ietf.org/html/rfc3463) 定义的 SMTP 增强状态代码的字符串。仅退回邮件操作类型存在此字段。  | 
|  message  |  包含退回邮件信息中所包括的用户可读文本的字符串。仅退回邮件操作类型存在此字段。  | 
|  sender  |  包含退回电子邮件的发件人电子邮件地址的字符串。此为发送退回邮件消息的地址。仅退回邮件操作类型存在此字段。  | 
|  functionArn  |  包含已触发的 Lambda 函数的 ARN 的字符串。仅 Lambda 操作类型存在此字段。  | 
|  invocationType  |  包含 Lambda 函数的调用类型的字符串。可能的值为 `RequestResponse` 和 `Event`。仅 Lambda 操作类型存在此字段。  | 
|  organizationArn  |  包含亚马逊 WorkMail组织的 ARN 的字符串。仅适用于 WorkMail 操作类型。  | 

### dkimVerdict 对象
<a name="receiving-email-notifications-contents-dkimverdict-object"></a>

`dkimVerdict` 对象包含以下字段。


| 字段名称 | 说明 | 
| --- | --- | 
|  status  |  包含 DKIM 裁决的字符串。可能的值有： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/ses/latest/dg/receiving-email-notifications-contents.html)  | 

### dmarcVerdict 对象
<a name="receiving-email-notifications-contents-dmarcverdict-object"></a>

`dmarcVerdict` 对象包含以下字段。


| 字段名称 | 说明 | 
| --- | --- | 
|  status  |  包含 DMARC 裁决的字符串。可能的值有： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/ses/latest/dg/receiving-email-notifications-contents.html)  | 

### spamVerdict 对象
<a name="receiving-email-notifications-contents-spamverdict-object"></a>

`spamVerdict` 对象包含以下字段。


| 字段名称 | 说明 | 
| --- | --- | 
|  status  |  包含垃圾邮件扫描结果的字符串。可能的值有： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/ses/latest/dg/receiving-email-notifications-contents.html)  | 

### spfVerdict 对象
<a name="receiving-email-notifications-contents-spfverdict-object"></a>

`spfVerdict` 对象包含以下字段。


| 字段名称 | 说明 | 
| --- | --- | 
|  status  |  包含 SPF 裁决的字符串。可能的值有： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/ses/latest/dg/receiving-email-notifications-contents.html)  | 

### virusVerdict 对象
<a name="receiving-email-notifications-contents-virusverdict-object"></a>

`virusVerdict` 对象包含以下字段。


| 字段名称 | 说明 | 
| --- | --- | 
|  status  |  包含病毒扫描结果的字符串。可能的值有： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/ses/latest/dg/receiving-email-notifications-contents.html)  | 

## 邮件对象
<a name="receiving-email-notifications-contents-mail-object"></a>

`mail` 对象包含以下字段。


| 字段名称 | 说明 | 
| --- | --- | 
|   destination  |  传入电子邮件的 MIME 标头中的所有收件人地址（包括 To: (收件人:) 和 CC: (抄送:) 收件人）的完整列表。  | 
|  messageId  |  包含 Amazon SES 分配给该电子邮件的唯一 ID 的字符串。如果电子邮件已送达 Amazon S3，则消息 ID 同时也是用于向 Amazon S3 存储桶写入消息的 Amazon S3 对象键。  | 
|  source  |  包含发送电子邮件的电子邮件地址 (具体来说，信封 MAIL FROM 地址) 的字符串。  | 
|  timestamp  |  包含电子邮件接收时间的字符串， ISO8601 格式为。  | 
|  headers  |  Amazon SES 标头和自定义的标头。每个标头具有以下字段：`name` 和 `value`。  | 
|  [`commonHeaders`](#receiving-email-notifications-contents-mail-object-commonHeaders)  |  所有电子邮件的共有标头。每个标头具有以下字段：`name` 和 `value`。  | 
|  headersTruncated  |  指定通知中的标头是否被截断，如果标头大于 10KB，则会发生截断。可能的值为 `true` 和 `false`。  | 

### commonHeaders 对象
<a name="receiving-email-notifications-contents-mail-object-commonHeaders"></a>

`commonHeaders` 对象可以包含下表中显示的字段。此对象中存在的字段取决于传入电子邮件中存在的字段。


| 字段名称 | 说明 | 
| --- | --- | 
| messageId | 原始邮件的 ID。 | 
| date | Amazon SES 收到此邮件的日期和时间。 | 
| to | 电子邮件的 To 标头。 | 
| cc | 电子邮件的 CC 标头。 | 
| bcc | 电子邮件的 BCC 标头。 | 
| from | 电子邮件的 From 标头。 | 
| sender | 电子邮件的 Sender 标头。 | 
| returnPath | 电子邮件的 Return-Path 标头。 | 
| replyTo | 电子邮件的 Reply-To 标头。 | 
| subject | 电子邮件的 Subject 标头。 | 

# Amazon SES 电子邮件接收通知的示例
<a name="receiving-email-notifications-examples"></a>

本节包括以下类型的通知的示例：
+ [因 SNS 操作而发送的通知。](#receiving-email-notifications-examples-sns-action)
+ [因另一种类型的操作而发送的通知](#receiving-email-notifications-examples-alert)（*警报通知*）。

## SNS 操作的通知
<a name="receiving-email-notifications-examples-sns-action"></a>

本部分包含 SNS 操作通知的示例。与之前显示的警报通知不同，它包括一个包含电子邮件的 `content` 部分，电子邮件通常是多用途 Internet 邮件扩展（MIME）格式。

```
{
  "notificationType":"Received",
  "receipt":{
    "timestamp":"2015-09-11T20:32:33.936Z",
    "processingTimeMillis":222,
    "recipients":[
      "recipient@example.com"
    ],
    "spamVerdict":{
      "status":"PASS"
    },
    "virusVerdict":{
      "status":"PASS"
    },
    "spfVerdict":{
      "status":"PASS"
    },
    "dkimVerdict":{
      "status":"PASS"
    },
    "action":{
      "type":"SNS",
      "topicArn":"arn:aws:sns:us-east-1:012345678912:example-topic"
    }
  },
  "mail":{
    "timestamp":"2015-09-11T20:32:33.936Z",
    "source":"61967230-7A45-4A9D-BEC9-87CBCF2211C9@example.com",
    "messageId":"d6iitobk75ur44p8kdnnp7g2n800",
    "destination":[
      "recipient@example.com"
    ],
    "headersTruncated":false,
    "headers":[
      {
        "name":"Return-Path",
        "value":"<0000014fbe1c09cf-7cb9f704-7531-4e53-89a1-5fa9744f5eb6-000000@amazonses.com>"
      },
      {
        "name":"Received",
        "value":"from a9-183.smtp-out.amazonses.com (a9-183.smtp-out.amazonses.com [54.240.9.183]) by inbound-smtp.us-east-1.amazonaws.com with SMTP id d6iitobk75ur44p8kdnnp7g2n800 for recipient@example.com; Fri, 11 Sep 2015 20:32:33 +0000 (UTC)"
      },
      {
        "name":"DKIM-Signature",
        "value":"v=1; a=rsa-sha256; q=dns/txt; c=relaxed/simple; s=ug7nbtf4gccmlpwj322ax3p6ow6yfsug; d=amazonses.com; t=1442003552; h=From:To:Subject:MIME-Version:Content-Type:Content-Transfer-Encoding:Date:Message-ID:Feedback-ID; bh=DWr3IOmYWoXCA9ARqGC/UaODfghffiwFNRIb2Mckyt4=; b=p4ukUDSFqhqiub+zPR0DW1kp7oJZakrzupr6LBe6sUuvqpBkig56UzUwc29rFbJF hlX3Ov7DeYVNoN38stqwsF8ivcajXpQsXRC1cW9z8x875J041rClAjV7EGbLmudVpPX 4hHst1XPyX5wmgdHIhmUuh8oZKpVqGi6bHGzzf7g="
      },
      {
        "name":"From",
        "value":"sender@example.com"
      },
      {
        "name":"To",
        "value":"recipient@example.com"
      },
      {
        "name":"Subject",
        "value":"Example subject"
      },
      {
        "name":"MIME-Version",
        "value":"1.0"
      },
      {
        "name":"Content-Type",
        "value":"text/plain; charset=UTF-8"
      },
      {
        "name":"Content-Transfer-Encoding",
        "value":"7bit"
      },
      {
        "name":"Date",
        "value":"Fri, 11 Sep 2015 20:32:32 +0000"
      },
      {
        "name":"Message-ID",
        "value":"<61967230-7A45-4A9D-BEC9-87CBCF2211C9@example.com>"
      },
      {
        "name":"X-SES-Outgoing",
        "value":"2015.09.11-54.240.9.183"
      },
      {
        "name":"Feedback-ID",
        "value":"1.us-east-1.Krv2FKpFdWV+KUYw3Qd6wcpPJ4Sv/pOPpEPSHn2u2o4=:AmazonSES"
      }
    ],
    "commonHeaders":{
      "returnPath":"0000014fbe1c09cf-7cb9f704-7531-4e53-89a1-5fa9744f5eb6-000000@amazonses.com",
      "from":[
        "sender@example.com"
      ],
      "date":"Fri, 11 Sep 2015 20:32:32 +0000",
      "to":[
        "recipient@example.com"
      ],
      "messageId":"<61967230-7A45-4A9D-BEC9-87CBCF2211C9@example.com>",
      "subject":"Example subject"
    }
  },
  "content":"Return-Path: <61967230-7A45-4A9D-BEC9-87CBCF2211C9@example.com>\r\nReceived: from a9-183.smtp-out.amazonses.com (a9-183.smtp-out.amazonses.com [54.240.9.183])\r\n by inbound-smtp.us-east-1.amazonaws.com with SMTP id d6iitobk75ur44p8kdnnp7g2n800\r\n for recipient@example.com;\r\n Fri, 11 Sep 2015 20:32:33 +0000 (UTC)\r\nDKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/simple;\r\n\ts=ug7nbtf4gccmlpwj322ax3p6ow6yfsug; d=amazonses.com; t=1442003552;\r\n\th=From:To:Subject:MIME-Version:Content-Type:Content-Transfer-Encoding:Date:Message-ID:Feedback-ID;\r\n\tbh=DWr3IOmYWoXCA9ARqGC/UaODfghffiwFNRIb2Mckyt4=;\r\n\tb=p4ukUDSFqhqiub+zPR0DW1kp7oJZakrzupr6LBe6sUuvqpBkig56UzUwc29rFbJF\r\n\thlX3Ov7DeYVNoN38stqwsF8ivcajXpQsXRC1cW9z8x875J041rClAjV7EGbLmudVpPX\r\n\t4hHst1XPyX5wmgdHIhmUuh8oZKpVqGi6bHGzzf7g=\r\nFrom: sender@example.com\r\nTo: recipient@example.com\r\nSubject: Example subject\r\nMIME-Version: 1.0\r\nContent-Type: text/plain; charset=UTF-8\r\nContent-Transfer-Encoding: 7bit\r\nDate: Fri, 11 Sep 2015 20:32:32 +0000\r\nMessage-ID: <61967230-7A45-4A9D-BEC9-87CBCF2211C9@example.com>\r\nX-SES-Outgoing: 2015.09.11-54.240.9.183\r\nFeedback-ID: 1.us-east-1.Krv2FKpFdWV+KUYw3Qd6wcpPJ4Sv/pOPpEPSHn2u2o4=:AmazonSES\r\n\r\nExample content\r\n"
}
```

## 警报通知
<a name="receiving-email-notifications-examples-alert"></a>

本部分包含可由 S3 操作触发的 Amazon SNS 通知的示例。Lambda 操作、退回邮件操作、停止操作和 WorkMail 操作触发的通知非常相似。虽然通知包含有关电子邮件的信息，但它不包含电子邮件内容本身。

```
{
     "notificationType": "Received",
	   "receipt": {
	     "timestamp": "2015-09-11T20:32:33.936Z",
	     "processingTimeMillis": 406,
	     "recipients": [
	       "recipient@example.com"
	     ],
	     "spamVerdict": {
	       "status": "PASS"
	     },
	     "virusVerdict": {
	       "status": "PASS"
	     },
	     "spfVerdict": {
	       "status": "PASS"
	     },
	     "dkimVerdict": {
	       "status": "PASS"
	     },
	     "action": {
	       "type": "S3",
	       "topicArn": "arn:aws:sns:us-east-1:012345678912:example-topic",
	       "bucketName": "my-S3-bucket",
	       "objectKey": "\email"
	     }
	   },
	   "mail": {
	     "timestamp": "2015-09-11T20:32:33.936Z",
	     "source": "0000014fbe1c09cf-7cb9f704-7531-4e53-89a1-5fa9744f5eb6-000000@amazonses.com",
	     "messageId": "d6iitobk75ur44p8kdnnp7g2n800",
	     "destination": [
	       "recipient@example.com"
	     ],
	     "headersTruncated": false,
	     "headers": [
	       {
	         "name": "Return-Path",
	         "value": "<0000014fbe1c09cf-7cb9f704-7531-4e53-89a1-5fa9744f5eb6-000000@amazonses.com>"
	       },
	       {
	         "name": "Received",
	         "value": "from a9-183.smtp-out.amazonses.com (a9-183.smtp-out.amazonses.com [54.240.9.183]) by inbound-smtp.us-east-1.amazonaws.com with SMTP id d6iitobk75ur44p8kdnnp7g2n800 for recipient@example.com; Fri, 11 Sep 2015 20:32:33 +0000 (UTC)"
	       },
	       {
	         "name": "DKIM-Signature",
	         "value": "v=1; a=rsa-sha256; q=dns/txt; c=relaxed/simple; s=ug7nbtf4gccmlpwj322ax3p6ow6yfsug; d=amazonses.com; t=1442003552; h=From:To:Subject:MIME-Version:Content-Type:Content-Transfer-Encoding:Date:Message-ID:Feedback-ID; bh=DWr3IOmYWoXCA9ARqGC/UaODfghffiwFNRIb2Mckyt4=; b=p4ukUDSFqhqiub+zPR0DW1kp7oJZakrzupr6LBe6sUuvqpBkig56UzUwc29rFbJF hlX3Ov7DeYVNoN38stqwsF8ivcajXpQsXRC1cW9z8x875J041rClAjV7EGbLmudVpPX 4hHst1XPyX5wmgdHIhmUuh8oZKpVqGi6bHGzzf7g="
	       },
	       {
	         "name": "From",
	         "value": "sender@example.com"
	       },
	       {
	         "name": "To",
	         "value": "recipient@example.com"
	       },
	       {
	         "name": "Subject",
	         "value": "Example subject"
	       },
	       {
	         "name": "MIME-Version",
	         "value": "1.0"
	       },
	       {
	         "name": "Content-Type",
	         "value": "text/plain; charset=UTF-8"
	       },
	       {
	         "name": "Content-Transfer-Encoding",
	         "value": "7bit"
	       },
	       {
	         "name": "Date",
	         "value": "Fri, 11 Sep 2015 20:32:32 +0000"
	       },
	       {
	         "name": "Message-ID",
	         "value": "<61967230-7A45-4A9D-BEC9-87CBCF2211C9@example.com>"
	       },
	       {
	         "name": "X-SES-Outgoing",
	         "value": "2015.09.11-54.240.9.183"
	       },
	       {
	         "name": "Feedback-ID",
	         "value": "1.us-east-1.Krv2FKpFdWV+KUYw3Qd6wcpPJ4Sv/pOPpEPSHn2u2o4=:AmazonSES"
	       }
	     ],
	     "commonHeaders": {
	       "returnPath": "0000014fbe1c09cf-7cb9f704-7531-4e53-89a1-5fa9744f5eb6-000000@amazonses.com",
	       "from": [
	         "sender@example.com"
	       ],
	       "date": "Fri, 11 Sep 2015 20:32:32 +0000",
	       "to": [
	         "recipient@example.com"
	       ],
	       "messageId": "<61967230-7A45-4A9D-BEC9-87CBCF2211C9@example.com>",
	       "subject": "Example subject"
	     }
	   }
	 }
```

# 停止规则集操作
<a name="receiving-email-action-stop"></a>

**Stop (停止)** 操作终止对接收规则集的评估，并会通过 Amazon SNS 通知您（可选）。此操作具有以下选项。
+ **SNS Topic (SNS 主题)** – 在停止操作执行完毕时发出通知的 Amazon SNS 主题的名称或 ARN。Amazon SNS 主题 ARN 的示例如：*arn:aws:sns:us-east-1:123456789012:MyTopic*。您也可以在设置操作时通过选择 **Create SNS Topic**（创建 SNS 主题）来创建 Amazon SNS 主题。有关 Amazon SNS 主题的更多信息，请参阅 [Amazon Simple Notification Service 开发人员指南](https://docs.aws.amazon.com/sns/latest/dg/CreateTopic.html)。
**注意**  
您选择的 Amazon SNS 主题必须与用于接收电子邮件的 Amazon SES 端点位于同一 AWS 区域中。

# 集成 Amazon WorkMail 操作
<a name="receiving-email-action-workmail"></a>

**WorkMail** 操作集成在 Amazon WorkMail 中。如果 Amazon WorkMail 执行您的所有电子邮件处理，您通常不会直接使用此操作，因为 Amazon WorkMail 会负责进行设置。此操作具有以下选项。
+ **Organization ARN (组织 ARN)** – Amazon WorkMail 组织的 ARN。Amazon WorkMail 组织 ARN 的形式是 `arn:aws:workmail:region:account_ID:organization/organization_ID`，其中：
  + `region` 是您正在其中使用 Amazon SES 和 Amazon WorkMail 的区域。(您必须从同一区域使用它们。) 例如，us-east-1。
  + `account_ID` 是 AWS 账户 ID。您可以在 AWS 管理控制台的[账户](https://console.aws.amazon.com/billing/home?#/account)页面查看 AWS 账户 ID。
  + `organization_ID` 是在您创建组织时由 Amazon WorkMail 生成的唯一标识符。您可以在 Amazon WorkMail 控制台中组织的 Organization Settings (组织设置) 页面中找到组织 ID。

  完整的 Amazon WorkMail 组织 ARN 示例：*arn:aws:workmail:us-east-1:123456789012:organization/m-68755160c4cb4e29a2b2f8fb58f359d7*。有关 Amazon WorkMail 组织的信息，请参阅 [Amazon WorkMail 管理员指南](https://docs.aws.amazon.com/workmail/latest/adminguide/organizations_overview.html)。
+ **SNS Topic (SNS 主题)** – 在执行 Amazon WorkMail 操作后发出通知的 Amazon SNS 主题的名称或 ARN。Amazon SNS 主题 ARN 的示例如：*arn:aws:sns:us-east-1:123456789012:MyTopic*。您也可以在设置操作时通过选择 **Create SNS Topic**（创建 SNS 主题）来创建 Amazon SNS 主题。有关 Amazon SNS 主题的更多信息，请参阅 [Amazon Simple Notification Service 开发人员指南](https://docs.aws.amazon.com/sns/latest/dg/CreateTopic.html)。
**注意**  
您选择的 Amazon SNS 主题必须与用于接收电子邮件的 Amazon SES 端点位于同一 AWS 区域中。

**注意**  
Amazon SES 仅支持在 WorkMail 可用的区域中执行 WorkMail 操作。请参阅 AWS 一般参考中的 [Amazon WorkMail 端点和限额](https://docs.aws.amazon.com/general/latest/gr/workmail.html)。

# 创建 IP 地址筛选条件控制台演练
<a name="receiving-email-ip-filtering-console-walkthrough"></a>

本节将指导您使用 Amazon SES 控制台设置 IP 地址筛选条件。IP 地址筛选条件允许您提供广泛的控制级别。这些 IP 筛选条件允许您显式阻止或允许来自特定 IP 地址或 IP 地址范围的所有邮件。

或者，您可以使用 `CreateReceiptFilter` API 创建一个 IP 地址筛选条件，如 [Amazon Simple Email Service API 参考](https://docs.aws.amazon.com/ses/latest/APIReference/API_CreateReceiptFilter.html)中所述。

**注意**  
如果您只希望接收来自有限已知 IP 地址列表的邮件，则请设置包含 `0.0.0.0/0` 的阻止列表，并设置包含所信任 IP 地址的允许列表。原定设置情况下，此配置会阻止全部 IP 地址，并仅允许来自您显式指定的 IP 地址的邮件。

## 先决条件
<a name="ip-filtering-prerequisites"></a>

在继续使用 IP 地址筛选条件设置基于收件人的电子邮件控制之前，必须满足以下先决条件：

1. 首先需要在 Amazon SES 中[创建并验证域身份](verify-addresses-and-domains.md)。

1. 接下来，您需要通过[将 MX 记录发布](receiving-email-mx-record.md)域的 DNS 设置来指定哪些邮件服务器可以接收域的邮件。（MX 记录应指接收您使用 Amazon SES 所在 AWS 地区的邮件的 Amazon SES 终端节点。）

## 创建 IP 地址筛选器
<a name="receipt-rules-create-ip-filters"></a>

**使用控制台创建 IP 地址筛选器**

1. 登录 AWS 管理控制台 并打开 Amazon SES 控制台，网址为[https://console.aws.amazon.com/ses/](https://console.aws.amazon.com/ses/)。

1. 在左侧导航窗格中，选择**电子邮件接收**。

1. 选择 **IP 地址筛选条件**选项卡。

1. 选择 **Create Filter**。

1. 输入筛选条件的唯一名称，该字段的图例将指示语法要求。（该名称必须少于 64 个字符，且只能包含字母数字、连字符 (-)、下划线 (\$1) 和句点 (.) 字符。名称必须以字母或数字开头和结尾。）

1. 输入 IP 地址或 IP 地址范围，该字段的图例将给出无类域间路由 (CIDR) 语法指定的示例。（单个 IP 地址如：10.0.0.1。IP 地址范围如 10.0.0.1/24。有关 CIDR 表示法的详细信息，请参阅 [RFC 2317](https://tools.ietf.org/html/rfc2317)。）

1. 选择**阻止**或**允许**单选按钮来选择**策略类型**。

1. 选择**创建筛选条件**。

1. 如果要添加另一个 IP 筛选条件，请选择**创建筛选条件**，然后对要添加的每个额外筛选条件重复前面的步骤。

1. 如果要删除 IP 地址筛选条件，请选择该筛选条件，然后选择**删除**按钮。

# 查看 Amazon SES 电子邮件接收的指标
<a name="receiving-email-metrics"></a>

如果您已在 Amazon SES 中启用电子邮件接收功能，并且已为电子邮件创建了接收规则，则可以使用 Amazon CloudWatch 查看这些接收规则集和规则的指标。

在 CloudWatch 控制台中，您可以在**指标** > **所有指标** > **SES** > **接收规则集指标**和**接收规则指标**下找到指标。

**注意**  
如果您尚未出现以下情况，则**接收规则集指标**和**接收规则指标**将不会显示在 **SES** 下：  
[已启用电子邮件接收](receiving-email-setting-up.md)
[创建了任何接收规则](receiving-email-receipt-rules-console-walkthrough.md)
收到了任何符合您的任何规则的邮件。

可供使用的邮件指标如下：
+ **邮件接收**    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/ses/latest/dg/receiving-email-metrics.html)
+ **邮件发布**    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/ses/latest/dg/receiving-email-metrics.html)

**注意**  
在前面的表格中，术语*适用*意味着发件人未被 IP 筛选条件列入黑名单，也不在 SES 的内部黑名单中，并且该规则具有匹配的收件人条件和匹配的 TLS 策略。
例如，如果您删除或撤消对于 Amazon S3 桶、Amazon SNS 主题或 Lambda 函数的权限，而某条接收规则中的一个操作已配置为使用它们，则可能发生发布失败错误。
由于一次只能有一个规则集处于活动状态，因此 SES 针对在 CloudWatch 中选择的时间范围内处于活动状态的所有规则集，发布一个显示为 *RuleSetName:[Active]* 的聚合指标。这样做的优势是，您可以自由更改规则集，而无需对警报设置进行任何更改。

**重要**  
您修复接收规则集所做的更改将仅应用于 Amazon SES 在更新后收到的电子邮件。在评估电子邮件时，始终使用收到电子邮件时采用的接收规则集。

显示在 CloudWatch 控制台中的 SES *接收规则集*的指标。

![\[CloudWatch 中的接收规则集指标。\]](http://docs.aws.amazon.com/zh_cn/ses/latest/dg/images/inbound_cloudwatch_rule_set_metrics.png)


显示在 CloudWatch 控制台中的 SES *接收规则*的指标。

![\[CloudWatch 中的接收规则指标。\]](http://docs.aws.amazon.com/zh_cn/ses/latest/dg/images/inbound_cloudwatch_rule_metrics.png)
