

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

# 使用 Amazon 监控 SES 事件 EventBridge
<a name="monitoring-eventbridge"></a>

EventBridge 是一项无服务器服务，它使用事件将应用程序组件连接在一起，使您可以更轻松地构建可扩展的事件驱动应用程序。事件驱动型架构是一种构建松耦合软件系统的风格，这些系统通过发出和响应事件来协同工作。事件是 JSON 格式的消息，通常表示资源或环境的变化，或是其他管理事件。

某些 SES 功能将生成您在创建事件目的地时定义的事件并将其发送到 EventBridge 默认事件总线。事件总线是接收事件并将其传送到零个或多个目的地或*目标*的路由器。与事件总线关联的规则会在事件到达时进行评估。每条规则都会检查事件是否与规则的模式相匹配。如果事件确实匹配，则将事件 EventBridge 发送到指定的目标。

当功能发生状态更改或状态更新 EventBridge 时，SES 会向发送事件。您可以使用 EventBridge 规则将事件路由到您定义的目标。这些事件将尽最大努力传输，可能会不按顺序传输。

**Topics**
+ [SES 事件](#supported-events)
+ [SES 事件架构参考](#eventbridge-events)
+ [与 SES 事件 EventBridge 配合使用](#eventbridge-enable-event-notifications)
+ [其他 EventBridge 资源](#eventbridge-additonal-resources)

## SES 事件
<a name="supported-events"></a>

以下事件由 SES 功能生成并发送到中的默认事件总线 EventBridge。有关更多信息，包括每种事件类型的详细数据，请参阅 [SES 事件架构参考](#eventbridge-events)。


**虚拟可交付性管理器 Advisor 事件**  

| 事件类型 | 说明 | 
| --- | --- | 
|  Advisor 推荐状态打开  |  每当虚拟可交付性管理器 Advisor 中打开新推荐时都会生成事件。  | 
|  Advisor 推荐状态已解决  |  每当虚拟可交付性管理器 Advisor 中解决了新推荐时都会生成事件。  | 


**SES 电子邮件发送事件**  

| 事件类型 | 说明 | 
| --- | --- | 
|  电子邮件已退回  |  收件人的邮件服务器永久拒绝了电子邮件的*硬退信*。（只有当 SES 重试一段时间后仍无法发送邮件时才包括*软退信*。）  | 
|  电子邮件已单击  |  收件人单击了电子邮件中包含的一个或多个链接。  | 
|  电子邮件投诉已收到  |  电子邮件已成功送达收件人的邮件服务器，但收件人将其标记为垃圾邮件。  | 
|  电子邮件送达  |  SES 已成功将电子邮件传送到收件人的邮件服务器。  | 
|  电子邮件传送延迟  |  无法将电子邮件传送给收件人的邮件服务器，因为临时出现问题。例如，当收件人的收件箱已满，或者当接收电子邮件服务器遇到临时问题时，可能会发生传送延迟。  | 
|  电子邮件已打开  |  收件人已收到消息并在其电子邮件客户端中打开了邮件。  | 
|  电子邮件已拒绝  |  SES 已接受电子邮件，但确定它包含病毒，而未尝试将其传送到收件人的邮件服务器。  | 
|  电子邮件呈现失败  |  由于模板呈现问题，未发送电子邮件。当模板数据丢失或模板参数与数据不匹配时，可能会发生此事件类型。（此事件类型仅在您使用 [https://docs.aws.amazon.com/ses/latest/APIReference/API_SendTemplatedEmail.html](https://docs.aws.amazon.com/ses/latest/APIReference/API_SendTemplatedEmail.html) 或 [https://docs.aws.amazon.com/ses/latest/APIReference/API_SendBulkTemplatedEmail.html](https://docs.aws.amazon.com/ses/latest/APIReference/API_SendBulkTemplatedEmail.html) API 操作发送电子邮件时发生。）  | 
|  电子邮件已发送  |  发送请求成功，SES 将尝试将消息传送到收件人的邮件服务器。（如果使用账户级别或全局抑制，SES 仍会将其计为发送，但会抑制送达。）  | 
|  电子邮件已订阅  |  电子邮件已成功发送，但收件人通过单击电子邮件标头中的 `List-Unsubscribe` 或脚注中的 `Unsubscribe` 链接更新了订阅首选项。  | 

## SES 事件架构参考
<a name="eventbridge-events"></a>

来自 AWS 服务的所有事件都有一组公共字段，其中包含有关事件的元数据，例如作为事件来源的 AWS 服务、事件的生成时间、事件发生的账户和区域等。有关这些常规字段的定义，请参阅《EventBridge 用户指南》**中的[事件结构参考](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-events-structure.html)。

此外，每个事件都有一个 `detail` 字段，其中包该特定事件专有的数据。下面的参考定义了各种 SES 事件的详细信息字段。

使用 EventBridge 选择和管理 SES 事件时，请记住以下几点：
+ 来自 SES 的所有事件的 `source` 字段都设置为 `aws.ses`。
+ `detail-type` 字段指定事件类型。请参阅[SES 事件](#supported-events)中的事件类型表。
+ `detail` 字段包含该特定事件专有的数据。

  对于某些事件类型，例如虚拟可交付性管理器的事件类型，详细信息字段是一个相当简单的数据字符串，该字符串由一组有限的静态值填充而成。相反，电子邮件发送事件的详细信息字段更为复杂，因为它可以由许多详细信息子字段组成，这些子字段是静态和动态值的组合，例如发送电子邮件的时间戳、收件人地址和许多其他电子邮件属性。

**Topics**
+ [虚拟可交付性管理器 Advisor](#schema-resource-status-event-vdm)
+ [SES 电子邮件发送状态架构](#schema-resource-status-event-email-sending)

### 虚拟可交付性管理器 Advisor
<a name="schema-resource-status-event-vdm"></a>

以下架构参考定义了虚拟可交付性管理器 Advisor 状态事件专有的字段。

所有事件架构（例如`version`、`id``account`、和其他）中显示的常规字段的定义可在*EventBridge 用户指南*[的事件结构参考](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-events-structure.html)中找到。`source` 和 `detail-type` 字段包含在下面的参考中，因为它们包含 SES 事件的 SES 特定值。

`source`  
标识生成事件的服务。对于 SES 事件，此值为 `aws.ses`。

`detail-type`  
标识事件的类型。  
该字段的值列在 [SES 事件](#supported-events)中的*虚拟可交付性管理器 Advisor 事件*表中。

`detail`  
包含关于事件信息的 JSON 对象。生成事件的服务决定该字段的内容。  
此字段的值可以是：  
+ `DKIM verification is not enabled.`
+ `DKIM verification has failed.`
+ `DKIM signing key length is below 2048 bits.`
+ `DMARC configuration was not found.`
+ `DMARC configuration could not be parsed.`
+ `DKIM record was not found.`
+ `DKIM record is not aligned.`
+ `MAIL FROM record is not aligned.`
+ `SPF record was not found.`
+ `SPF record for Amazon SES was not found.`
+ `SPF all qualifier is missing.`
+ `An SPF configuration issue was found.`
+ `BIMI record not found or configured without default selector.`
+ `BIMI has malformed TXT record.`

**Example 例如：虚拟可交付性管理器 Advisor 状态事件**  <a name="schema-resource-status-event-vdm.example"></a>
以下是 `Advisor Recommendation Status Open` 事件类型的虚拟可交付性管理器 Advisor 状态事件示例。此示例中的详细信息事件值为 `SPF record was not found.`。  

```
{
 "version": "0",
  "id": "abcd9999-ef33-0123-90ab-abcdef666666",
  "detail-type": "Advisor Recommendation Status Open",
  "source": "aws.ses",
  "account": "012345678901",
  "time": "2023-11-15T17:00:59Z",
  "region": "us-east-1",
  "resources": [
    "arn:aws:ses:us-east-1:012345678901:identity/vdm.events-publishing.cajun.syster-games.example.com"
  ],
  "detail": { "version": "1.0.0", "data": "SPF record was not found." }
}
```

### SES 电子邮件发送状态架构
<a name="schema-resource-status-event-email-sending"></a>

以下架构参考定义了 SES 电子邮件发送状态事件专有的字段。

所有事件架构（例如`version`、`id``account`、和其他）中显示的常规字段的定义可在*EventBridge 用户指南*[的事件结构参考](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-events-structure.html)中找到。`source` 和 `detail-type` 字段包含在下面的参考中，因为它们包含 SES 事件的 SES 特定值。

`source`  
标识生成事件的服务。对于 SES 事件，此值为 `aws.ses`。

`detail-type`  
标识事件的类型。  
此字段的值列在 [SES 事件](#supported-events)中的 *SES 电子邮件发送事件*表中。

`detail`  
包含关于事件信息的 JSON 对象。生成事件的服务决定该字段的内容。  
此处无法列出此字段的所有可能值，因为它们由在任何给定时刻发送的每封唯一电子邮件生成的静态和动态值组成。但是，提供了一个示例，让您大致了解此字段可以包含的数据类型。*使用 EventBridge 沙盒可以找到所有电子邮件发送事件类型的详细数据示例，请参阅[在中指定示例事件 EventBridge](#event-pattern-sandbox-sample)。*  
以下是为 SES 电子邮件发送事件 `Email Rendering Failed` 生成的详细信息数据示例：  

```
...,
  "detail": {
    "eventType": "Rendering Failure",
    "mail": {
      "timestamp": "2018-01-22T18:43:06.197Z",
      "source": "sender@example.com",
      "sourceArn": "arn:aws:ses:us-east-1:123456789012:identity/sender@example.com",
      "sendingAccountId": "123456789012",
      "messageId": "EXAMPLE7c191be45-e9aedb9a-02f9-4d12-a87d-dd0099a07f8a-000000",
      "destination": ["recipient@example.com"],
      "headersTruncated": false,
      "tags": {
        "ses:configuration-set": ["ConfigSet"]
      }
    },
    "failure": {
      "errorMessage": "Attribute 'attributeName' is not present in the rendering data.",
      "templateName": "MyTemplate"
    }
  }
```

**Example 示例：电子邮件发送状态事件**  <a name="schema-resource-status-event-email-sending.example"></a>
以下是事件类型 `Email Rendering Failed` 的完整电子邮件发送状态事件示例。此示例中的详细事件值是基于特定电子邮件的电子邮件发送事件的静态和动态值的组合。  

```
{
  "version": "0",
  "id": "12a18625-3328-fafd-2809-a5e16004f112",
  "detail-type": "Email Rendering Failed",
  "source": "aws.ses",
  "account": "123456789012",
  "time": "2023-07-17T16:48:05Z",
  "region": "us-east-1",
  "resources": ["arn:aws:ses:us-east-1:123456789012:identity/example.com"],
  "detail": {
    "eventType": "Rendering Failure",
    "mail": {
      "timestamp": "2018-01-22T18:43:06.197Z",
      "source": "sender@example.com",
      "sourceArn": "arn:aws:ses:us-east-1:123456789012:identity/sender@example.com",
      "sendingAccountId": "123456789012",
      "messageId": "EXAMPLE7c191be45-e9aedb9a-02f9-4d12-a87d-dd0099a07f8a-000000",
      "destination": ["recipient@example.com"],
      "headersTruncated": false,
      "tags": {
        "ses:configuration-set": ["ConfigSet"]
      }
    },
    "failure": {
      "errorMessage": "Attribute 'attributeName' is not present in the rendering data.",
      "templateName": "MyTemplate"
    }
  }
}
```

## 与 SES 事件 EventBridge 配合使用
<a name="eventbridge-enable-event-notifications"></a>

默认情况下，SES 将事件发送到 EventBridge 默认事件总线。您可以在默认事件总线上创建规则，以识别要发送 EventBridge 到一个或多个指定目标的特定事件。每条规则都包含一个*事件模式*， EventBridge 用于在事件到达事件总线时进行匹配。如果事件与给定规则的事件模式匹配，则 EventBridge 会将该事件发送到规则中指定的目标。

在中 EventBridge，定义事件模式通常是创建新规则或编辑现有规则的更大过程的一部分。要了解如何创建 EventBridge 规则，请参阅*EventBridge 用户指南*中的[创建对事件做出反应的 Amazon EventBridge 规则](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-create-rule.html)。

通过使用中的沙盒功能 EventBridge，您可以快速定义事件模式并使用示例事件来确认模式与所需事件相匹配，而无需先创建或编辑规则。有关使用沙盒的详细说明，请参阅*EventBridge 用户*指南[中的使用 EventBridge 沙盒测试事件模式](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-event-pattern-sandbox.html)。

### 在 EventBridge 沙盒中指定 SES 示例事件
<a name="event-pattern-sandbox-sample"></a>

您可以为 SES 事件选择示例事件，用它们来测试自己创建的事件模式。

**在 EventBridge 沙盒中指定 SES 示例事件**

1. 打开亚马逊 EventBridge 控制台，网址为[https://console.aws.amazon.com/events/](https://console.aws.amazon.com/events/)。

1. 在导航窗格中选择**开发人员资源**，然后选择**沙盒**，再在**沙盒**页面上选择**事件模式**选项卡。

1. 对于**事件来源**，选择**AWS 事件或 EventBridge 合作伙伴事件**。

1. 在**示例事件**部分中，为**示例事件类型**选择 **AWS 事件**。

1. 对于**示例事件**，请向下滚动到 **SES**，然后选择所需的 SES 事件。

   EventBridge 显示该事件类型的示例事件及其所有详细数据。

   然后，您可以使用此事件来测试在**事件模式**部分创建的事件模式，或者将其用作创建自己的模式测试（将在下一节中介绍）示例事件的基础。

### 创建并测试 SES 事件的事件模式
<a name="event-pattern-sandbox"></a>

按上一节所述选择示例事件后，您可以创建事件模式并使用示例事件来确保它与所需的事件相匹配。

**创建和测试与 EventBridge 沙盒中的 SES 事件相匹配的事件模式**

1. 打开亚马逊 EventBridge 控制台，网址为[https://console.aws.amazon.com/events/](https://console.aws.amazon.com/events/)。

1. 在导航窗格中选择**开发人员资源**，然后选择**沙盒**，再在**沙盒**页面上选择**事件模式**选项卡。

1. 对于**事件源**，选择**AWS 事件或 EventBridge 合作伙伴事件**，然后选择要测试的示例事件，如上一节所述。

1. 向下滚动到**创建方法**，然后选择**使用模式表单**。

1. 在**事件模式**部分中，为**事件源**选择 **AWS 服务**。

1. 在 **AWS 服务**下，选择 **SES**。

1. 对于**事件类型**，选择要匹配的 SES 事件类型。

   EventBridge 显示与所选 SES 事件匹配的最小事件模式，由`source`和`detail-type`字段组成。

   在以下两个示例中，第一个事件模式与所有 `Advisor Recommendation Status Resolved` 事件匹配，在第二个示例中，匹配所有 `Email Bounced` 事件：

   ```
   {
     "source": ["aws.ses"],
     "detail-type": ["Advisor Recommendation Status Resolved"]
   }
   ```

   ```
   {
     "source": ["aws.ses"],
     "detail-type": ["Email Bounced"]
   }
   ```

1. 要更改事件模式，请选择**编辑模式**，然后在 JSON 编辑器中进行更改。

   您也可以匹配一个或多个详细数据字段中的值。这包括为字段值指定多个可行值。

   在以下示例中，将详细信息字段添加到生成的最小事件模式中，其 `data` 字段值指定为 `DKIM record was not found`，以便查找所有具有相同详细信息值的虚拟可交付性管理器 Advisor 事件：

   ```
   {
     "source": ["aws.ses"],
     "detail-type": ["Advisor Recommendation Status Resolved"],
     "detail": {
       "data": ["DKIM record was not found."]
     }
   }
   ```

   在此示例中，添加了详细信息子字段，以报告 *2024-08-05* 从 *noreply@example.com* 发送的所有退回电子邮件所生成的事件。（此处使用前缀匹配作为[内容筛选](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-event-patterns-content-based-filtering.html)的一部分。）：

   ```
   {
     "source": ["aws.ses"],
     "detail-type": ["Email Bounced"],
     "detail": {
       "mail": {
         "timestamp": [{
           "prefix": "2024-08-05"
         }],
         "source": ["noreply@example.com"]
       }
     }
   }
   ```

   阅读*EventBridge 用户指南*中的[事件模式](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-event-patterns.html)很重要，它解释了您在 JSON 编辑器中输入的事件模式值必须用方括号括起来，`[...]`因为它被视为数组。此外还提供了有关如何构造高级事件模式的更多信息。

1. 要测试您的事件模式是否与您在上述**示例事件**窗格中指定的示例事件相匹配，请选择**测试模式**。如果匹配，JSON 编辑器底部的绿色横幅将显示“*Sample event matched the event pattern*”。

1. 要对选择**测试模式**后的错误进行故障排除，请执行以下操作：
   + 如果存在与 JSON 相关的错误，则消息将指出原因，例如“*Event pattern is not valid. Reason: "data" must be an object or an array at line: 5, column: 14*”。要解决这个问题，请用方括号 `[...]` 将第 5 行的值括起来。
   + 如果*示例事件*中的值与您的*事件模式*之间存在差异，则将显示消息“*Sample event did not match the event pattern*”。这意味着您要测试的一个或多个值与*示例事件*生成器生成的示例值不同。要解决此问题，请继续执行其余步骤。

1. 要更改*示例事件*中的示例值以成功测试您的*事件模式*，请在**示例事件**窗格中，选择 JSON 编辑器下的**复制**。

1. 对于编辑器上方的**示例事件类型**，选择**输入我自己的**旁的单选按钮。

1. 将示例事件粘贴到 JSON 编辑器中，对于您在事件模式中使用的任何字段，请替换相同字段的值以匹配您在事件模式中指定的值。

1. 向下滚动到“事件模式”窗格，然后再次选择**测试模式**。如果所有值都输入正确且匹配，则 JSON 编辑器底部将显示一个绿色横幅，指示“*Sample event matched the event pattern*”。

## 其他 EventBridge 资源
<a name="eventbridge-additonal-resources"></a>

有关如何使用 EventBridge 处理和管理事件的更多信息，请参阅 [https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-what-is.html](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-what-is.html)中的以下主题。
+ 有关事件总线工作原理的详细信息，请参阅 [Amazon EventBridge 事件总线](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-event-bus.html)。
+ 有关事件结构的信息，请参阅 [Events](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-events.html)
+ 有关构造事件模式 EventBridge 以便在将事件与规则进行匹配时使用的信息，请参阅[事件模式](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-event-patterns.html)
+ 有关创建规则以指定 EventBridge 处理哪些事件的信息，请参阅[规则](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-rules.html)
+ 有关指定向哪些服务或其他[目标 EventBridge ](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-targets.html)发送匹配事件的信息，请参阅 Targets