使用 Amazon EventBridge 监控 SES 事件 - Amazon Simple Email Service

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

使用 Amazon EventBridge 监控 SES 事件

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

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

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

SES 事件

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

虚拟可交付性管理器 Advisor 事件
事件类型 说明

Advisor 推荐状态打开

每当虚拟可交付性管理器 Advisor 中打开新推荐时都会生成事件。

Advisor 推荐状态已解决

每当虚拟可交付性管理器 Advisor 中解决了新推荐时都会生成事件。

SES 电子邮件发送事件
事件类型 说明

电子邮件已退回

收件人的邮件服务器永久拒绝了电子邮件的硬退信。(只有当 SES 重试一段时间后仍无法发送邮件时才包括软退信。)

电子邮件已单击

收件人单击了电子邮件中包含的一个或多个链接。

电子邮件投诉已收到

电子邮件已成功送达收件人的邮件服务器,但收件人将其标记为垃圾邮件。

电子邮件送达

SES 已成功将电子邮件传送到收件人的邮件服务器。

电子邮件传送延迟

无法将电子邮件传送给收件人的邮件服务器,因为临时出现问题。例如,当收件人的收件箱已满,或者当接收电子邮件服务器遇到临时问题时,可能会发生传送延迟。

电子邮件已打开

收件人已收到消息并在其电子邮件客户端中打开了邮件。

电子邮件已拒绝

SES 已接受电子邮件,但确定它包含病毒,而未尝试将其传送到收件人的邮件服务器。

电子邮件呈现失败

由于模板呈现问题,未发送电子邮件。当模板数据丢失或模板参数与数据不匹配时,可能会发生此事件类型。(此事件类型仅在您使用 SendTemplatedEmailSendBulkTemplatedEmail API 操作发送电子邮件时发生。)

电子邮件已发送

发送请求成功,SES 将尝试将消息传送到收件人的邮件服务器。(如果使用账户级别或全局抑制,SES 仍会将其计为发送,但会抑制送达。)

电子邮件已订阅

电子邮件已成功发送,但收件人通过单击电子邮件标头中的 List-Unsubscribe 或脚注中的 Unsubscribe 链接更新了订阅首选项。

SES 事件架构参考

来自 AWS 服务的所有事件都有一组公共字段,其中包含有关事件的元数据,例如作为事件来源的 AWS 服务、事件的生成时间、事件发生的账户和区域。有关这些常规字段的定义,请参阅《EventBridge 用户指南》中的事件结构参考

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

在使用 EventBridge 选择和管理 SES 事件时,请记住以下几点:

  • 来自 SES 的所有事件的 source 字段都设置为 aws.ses

  • detail-type 字段指定事件类型。请参阅SES 事件中的事件类型表。

  • detail 字段包含该特定事件专有的数据。

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

虚拟可交付性管理器 Advisor

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

在《EventBridge 用户指南》中的事件结构参考中,可以找到所有事件架构(例如 versionidaccount 和其它)中显示的常规字段的定义。sourcedetail-type 字段包含在下面的参考中,因为它们包含 SES 事件的 SES 特定值。

source

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

detail-type

标识事件的类型。

该字段的值列在 SES 事件中的虚拟可交付性管理器 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.

例如:虚拟可交付性管理器 Advisor 状态事件

以下是 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 电子邮件发送状态架构

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

在《EventBridge 用户指南》中的事件结构参考中,可以找到所有事件架构(例如 versionidaccount 和其它)中显示的常规字段的定义。sourcedetail-type 字段包含在下面的参考中,因为它们包含 SES 事件的 SES 特定值。

source

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

detail-type

标识事件的类型。

此字段的值列在 SES 事件中的 SES 电子邮件发送事件表中。

detail

包含关于事件信息的 JSON 对象。生成事件的服务决定该字段的内容。

此处无法列出此字段的所有可能值,因为它们由在任何给定时刻发送的每封唯一电子邮件生成的静态和动态值组成。但是,提供了一个示例,让您大致了解此字段可以包含的数据类型。您可以使用 EventBridge 沙盒查看所有电子邮件发送事件类型的示例详细信息数据,请参阅在 EventBridge 中指定示例事件

以下是为 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" } }
例 示例:电子邮件发送状态事件

以下是事件类型 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" } } }

将 EventBridge 与 SES 事件配合使用

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

在 EventBridge 中,定义事件模式通常是创建新规则或编辑现有规则这一大型过程中的一环。要了解如何创建 EventBridge 规则,请参阅《Amazon EventBridge User Guide》中的 Creating Amazon EventBridge rules that react to events

不过,借助 EventBridge 中的沙盒功能,您可以快速定义事件模式并使用示例事件来确认这个模式是否与所需事件相匹配,而无需先创建或编辑规则。有关使用沙盒的详细说明,请参阅《EventBridge User Guide》中的 Testing an event pattern using the EventBridge Sandbox

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

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

在 EventBridge 沙盒中指定 SES 示例事件
  1. 访问 https://console.aws.amazon.com/events/,打开 Amazon EventBridge 控制台。

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

  3. 对于事件源,选择AWS 事件或 EventBridge 合作伙伴事件

  4. 示例事件部分中,为示例事件类型选择 AWS 事件

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

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

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

创建并测试 SES 事件的事件模式

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

创建并测试与 EventBridge 沙盒中的 SES 事件相匹配的事件模式
  1. 访问 https://console.aws.amazon.com/events/,打开 Amazon EventBridge 控制台。

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

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

  4. 向下滚动到创建方法,然后选择使用模式表单

  5. 事件模式部分中,为事件源选择 AWS 服务

  6. AWS 服务下,选择 SES

  7. 对于事件类型,选择要匹配的 SES 事件类型。

    EventBridge 会显示与所选 SES 事件匹配的最小事件模式(由 sourcedetail-type 字段组成)。

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

    { "source": ["aws.ses"], "detail-type": ["Advisor Recommendation Status Resolved"] }
    { "source": ["aws.ses"], "detail-type": ["Email Bounced"] }
  8. 要更改事件模式,请选择编辑模式,然后在 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-05noreply@example.com 发送的所有退回电子邮件所生成的事件。(此处使用前缀匹配作为内容筛选的一部分。):

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

    请务必阅读《EventBridge User Guide》中的事件模式,其中介绍了您在 JSON 编辑器中输入的事件模式值必须用方括号 [...] 括起来,因为它被视为数组。此外还提供了有关如何构造高级事件模式的更多信息。

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

  10. 要对选择测试模式后的错误进行故障排除,请执行以下操作:

    • 如果存在与 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”。这意味着您要测试的一个或多个值与示例事件生成器生成的示例值不同。要解决此问题,请继续执行其余步骤。

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

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

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

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

其他 EventBridge 资源

有关如何使用 EventBridge 来处理和管理事件的更多信息,请参阅 Amazon EventBridge User Guide 中的以下主题。

  • 有关事件总线工作原理的详细信息,请参阅 Amazon EventBridge event bus

  • 有关事件结构的信息,请参阅 Events

  • 有关构造事件模式以供 EventBridge 在将事件与规则进行匹配时使用的信息,请参阅 Event patterns

  • 有关创建规则以指定 EventBridge 所处理事件的信息,请参阅 Rules

  • 有关指定 EventBridge 将匹配的事件发送到哪些服务或其他目的地的信息,请参阅 Targets