Amazon SES 电子邮件接收概念和使用案例 - Amazon Simple Email Service

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

Amazon SES 电子邮件接收概念和使用案例

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

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

使用接收规则进行基于收件人的控制

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

另一种选项是,您还可以添加收件人条件,以指定仅在传入邮件的收件人地址与条件中指定的收件人身份匹配时才执行操作。例如,如果您拥有 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 通知您(可选)。

  • 集成 Amazon WorkMail 操作 – 使用 Amazon WorkMail 处理邮件。您通常不会直接使用此操作,因为 Amazon WorkMail 会负责进行设置。

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


                入站电子邮件概述

使用 IP 地址筛选条件进行基于 IP 的控制

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

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

注意
  • 无论您的 IP 地址筛选器配置如何,Amazon EC2 都将阻止端口 25(邮件发送)上的出站流量,除非已列入允许列表。有关更多信息,请参阅这篇 AWS re: Post 文章

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

电子邮件接收过程

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

  1. Amazon SES 首先查看发件人的 IP 地址。在以下情况下,Amazon SES 不允许邮件通过此阶段:

    • IP 地址位于您的阻止列表中。

    • IP 地址在 Amazon SES 阻止列表中但不在您的允许列表中。

  2. Amazon SES 检查活动规则集,以确定是否有任何接收规则包含收件人条件:

    • 如果存在收件人条件,且该条件与任何传入电子邮件的收件人匹配,则 Amazon SES 将接受该电子邮件。否则,如果没有任何匹配项,Amazon SES 将阻止电子邮件。

    • 如果接收规则不包含收件人条件,则 Amazon SES 将接受邮件,该规则的所有操作都将应用于您拥有的所有已验证身份。

  3. Amazon SES 对电子邮件进行身份验证,并扫描其内容中是否存在垃圾邮件和恶意软件:

    • 根据在 SMTL 事务期间使用的 MAIL FROM 的域下指定的 SPF 策略检查将电子邮件传输到 Amazon SES 的远程主机的 IP 地址。

    • 检查电子邮件标题部分中存在的 DKIM 签名。

    • 如果启用了内容扫描,则会扫描电子邮件内容中是否存在垃圾邮件和恶意软件。

    • 电子邮件身份验证和内容扫描结果将在接收规则评估期间提供给您。

    参阅 电子邮件身份验证和恶意软件检测 了解更多信息。

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

Amazon SES 电子邮件接收的使用案例和限制

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

区域可用性

在您的区域中,Amazon SES 是否支持接收电子邮件?

Amazon SES 仅支持在特定 AWS 区域接收电子邮件。有关支持电子邮件接收的区域的完整列表,请参阅《AWS 一般参考》中的 Amazon Simple Email Service 端点和限额

基于 POP 或 IMAP 的电子邮件客户端

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

Amazon SES 不包括用于接收传入电子邮件的 POP 或 IMAP 服务器。这意味着您不能使用 Microsoft Outlook 等电子邮件客户端来接收传入的电子邮件。如果您需要一个可使用电子邮件客户端收发电子邮件的解决方案,请考虑使用 Amazon WorkMail

使用其他 AWS 服务

您是否已设置适当的权限?

如果需要将邮件传送到 S3 存储桶、发布到不属于您的 Amazon SNS 主题、触发 Lambda 函数或使用客户托管式密钥,您需要向 Amazon SES 授予访问这些资源的权限。要授予 Amazon SES 访问权限,您需要通过这些 AWS 服务的控制台或 API 来针对资源创建策略。有关 授予权限

电子邮件内容

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

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

您将接收多大的电子邮件?

如果您选择将电子邮件存储在 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 开发人员指南

  • 如果您的电子邮件使用 SNS 操作通过 Amazon SNS 通知传送,您的应用程序可以侦听 Amazon SNS 通知,然后从通知中提取电子邮件。

您是否希望加密电子邮件?

Amazon SES 与 AWS Key Management Service(AWS KMS)集成时,可选择性地加密其写入 S3 存储桶的邮件。Amazon SES 在将您的邮件写入到 Amazon S3 之前,使用客户端加密对邮件进行加密。这意味着,在从 Amazon S3 取回邮件后,您必须负责对内容进行解密。AWS SDK for JavaAWS SDK for Ruby 提供能够为您处理解密的客户端。Amazon SES 仅在您选择将电子邮件传送到 S3 存储桶时才加密电子邮件。

不需要的邮件

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

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

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

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

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

邮件流

您打算如何划分邮件流?

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

电子邮件接收身份验证和恶意软件扫描

Amazon SES 对收到的每封电子邮件进行身份验证,并扫描其内容中是否存在垃圾邮件和恶意软件:SES 不会根据电子邮件身份验证或内容扫描结果对收到的电子邮件采取任何操作;但是,这些操作的结果将作为属性提供给您,以便您可以在 SES 接收规则操作(例如 Amazon SNS 通知中使用它们,或作为投递到 Amazon S3 的邮件标题。

电子邮件身份验证

Amazon SES 使用 SPF、DKIM 和 DMARC 对收到的每封电子邮件进行身份验证。作为活动接收规则集中的规则评估的一部分,每种身份验证机制的结果都会在 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 所述

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

Amazon SES 根据 ScanEnabled (API) 的值或与电子邮件匹配的接收规则的垃圾邮件和病毒扫描(控制台)属性扫描电子邮件内容中是否存在恶意软件。默认情况下,SES 会扫描收到的电子邮件内容中是否存在恶意软件。要对与特定接收规则匹配的接收电子邮件禁用内容扫描,您需要将接收规则的 ScanEnabled 标记设置为 false(如果使用 API),或者清除 Spam and virus scanning(垃圾邮件和病毒扫描)复选框(如果使用控制台)。如果已启用与电子邮件匹配的接收规则扫描,则内容扫描结果会在 SES 发送的 Amazon SNS 通知中提供,作为活动接收规则集中的规则评估的一部分。此外,如果您选择在 Amazon S3 中接收电子邮件副本,则内容扫描结果将被捕获到 SES 添加到电子邮件标题部分的 X-SES-Spam-VerdictX-SES-Virus-Verdict 标题中。

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

上述标题的可能值如下所列:

现在,您已经了解了电子邮件接收的概念、工作原理及使用案例,接下来您可以开启 设置电子邮件接收