亚马逊AWS官方博客

利用 AMAZON SES 服务中的 MAIL MANAGER 进行收件管理

Amazon SES 服务简介

Amazon SES(Amazon Simple Email Service)是一个电子邮件平台,为您提供了一种简单、经济高效的方式,通过您自己的电子邮件地址和域名发送和接收电子邮件。

为企业构建大规模电子邮件解决方案通常是一个复杂且昂贵的挑战。您必须处理诸如电子邮件服务器管理、网络配置和 IP 地址声誉等基础设施挑战。Amazon SES 消除了这些挑战,让您能够从亚马逊多年来为服务自身大规模客户群而构建的丰富经验和复杂的电子邮件基础设施中获益。

同时收邮件也是企业进行客户触达的一个重要方面,通过收邮件,再结合 SNS、Lambda 等自动触发的处理方式,可以实现很多场景,例如:

  • 对收到的邮件进行检查,防止垃圾、钓鱼等邮件。
  • 可以根据数据合规需求,将邮件转存到 S3 进行存档。
  • 自动分析邮件内容,实现例如客户咨询邮件的自动回复,根据投诉邮件自动创建工单等。

如何在 SES 中实现收邮件功能

在 Amazon SES 服务中,有两种方式可以实现收件管理,“Email receiving”和“Mail Manager”。要实现收邮件,首先我们需要一个验证过的域名,并且设置一个 MX 记录,这样,发到这个域名下某个邮箱的邮件,才会被 SES 接收。

Email receiving

通过“Email receiving”接收邮件,我们需要给我们的域名添加一条 MX 记录,其值为:

inbound-smtp.{region}.amazonaws.com

然后,再创建一个规则集(RuleSet)。其中,我们可以设置多个规则,并且在规则中配置“条件”和“动作”。

  • “条件”:就是收件人条件,即我们收邮件的邮箱。如果不设置收件人条件,当我们给这个邮箱发邮件的时候,邮件会因为收件地址不存在而退回。
  • “动作”:就是按照上面的条件收到收件后,要执行的动作,支持两种动作:
    • Lambda 函数:会以整个邮件内容为参数来调用设置的 Lambda 函数。
    • SNS 主题:会将邮件内容发送到 SNS 的主题上,我们可以再根据需要创建相应的订阅者来处理邮件。

可以看到,使用“Email receiving”的功能来接收邮件,配置比较简单,即定义一个收件的邮箱,以及要转发到哪里。这里的“邮箱”可以设置某个邮箱,或域名下的所有邮箱。

Mail Manager

Mail Manager 是 Amazon SES 最新提供的功能,实现了一系列的收件服务,可以帮助我们管理和优化收件功能,自动化接收电子邮件的处理流程,连接不同的业务实现不同的处理逻辑。

Mail Manager 提供的功能有:

  • 入站端点(Ingress Endpoint):一个关键的基础设施组件,是一个入站邮件数据处理的通道。
  • 流量策略(Traffic policies):一个入站流量过滤组建,可以通过定义一系列的策略来控制入站邮件,这些策略包括:基于收件地址、发件 IP、和 TLS 版本,来过滤入站的邮件。
  • 规则集(Rule sets): 是高度可定制的策略和规则,通过丰富的条件来定义一系列规则,以及满足这些规则时要执行的动作。规则条件可以是基于收件人、发件人等邮箱地址,也可以基于标题、内容大小等,甚至也可以基于 DKIM 等邮箱验证规范;而执行的动作也很丰富,写入到 S3、存档、SMTP 中继、添加邮件 Header、邮件收件人修改、发送到 WorkMail、发送到 API 等。
  • 附加组件(Add Ons): 它是来自 SES 认可的提供商所提供的一套专门的安全工具,可用于管理进入您的入站端点的电子邮件,并根据安全结果提供路由选项,如垃圾邮件扫描、黑名单列表管理等。这些工具可以直接集成到您的电子邮件工作流程中,并可直接从邮件管理器控制台激活。

Amazon SES 的 Mail Manager 进行收件管理的流程,以及各个组件间联系如下图:

Mail Manager 收件管理配置

下面,我们就详细介绍使用 Mail Manager 进行收件管理的配置步骤。

1. 验证域名

首先,我们需要对我们要进行收邮件的域名进行验证。具体步骤可以参考 SES 文档,这里不做赘述。

这里,我们验证的域名是“mail.funai.cloud”,接下来我们将以这个域名下的邮箱来进行收件管理。要接收邮件,我们还需要在这个域名上添加一条 MX 记录,MX 记录的值在我们完成 Ingress Endpoint 的创建后会提供。

2. Traffic policy

首先,我们先创建一条 Traffic policy。在 Amazon SES 控制台左边的菜单栏中的 Mail Manager 下面,找到“Traffic policies”,点击新建。

在这里,我们可以通过设置不同的条件,及其“Allow”或“Deny”设置,来针对入站邮件,进行准确的过滤。其中,“Maximum message size”就是过滤的大小限制,如果需要限制接收邮件的大小,可以在这里设置。“Policy Statement”就是策略的条件,这里可以设置基于收件地址、发件 IP、和 TLS 版本的条件。

这里我们设置允许所有以“mail.funai.cloud”结尾的收件地址。这实际上也是我们验证过的域名,这个 policy 其实就是接收这个域名下的所有邮件。

3. Rule Set 和存档

接下来, 要创建一个规则集 RuleSet:

在这里,我们只定义了一个规则,在这个规则中,定义了当收件人的邮箱是“opmt@mail.funai.cloud”时,则把这封邮件进行存档。

这里我们使用“ToAddress Equals opmt@mail.funai.cloud”的设置,但是,有些邮件的原文中,收件人可能是这样的格式: “To: “opmt@mail.funai.cloud” opmt@mail.funai.cloud”,这时候,可能就需要设置“Contains”操作符。

这里,我们还需要创建一个存档:

这里可以设置存档的时间等。

如果想通过程序自动获取邮件内容,并进行处理,目前需要通过将邮件写入 S3,在通过 S3 触发 Lambda 函数来读取邮件内容。创建写入 S3 的 action 如下:

我们需要给这个角色设置能够往这个 S3 写文件的权限:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "s3:PutObject"
            ],
            "Resource": "arn:aws:s3:::mt-ses-mail-bucket/*"
        }
    ]
}

除了根据收件人地址,我们还可以以下条件来设置:

  • From address
  • To address
  • CC address
  • Mail from
  • Recipient address
  • Subject
  • Helo
  • IP range
  • Message max size
  • DKIM
  • SPF
  • Trend Micro Virus Scanning (if subscribed)
  • TLS
  • TLS wrapped
  • Read receipt
  • DMARC policy

可以进行操作如下:

  • Write to S3
  • SMTP relay action
  • Archive action
  • Add header
  • Email recipients rewrite
  • Deliver to mailbox
  • Send to internet
  • Drop action

其具体含义及功能,请查看文档

4. Ingress endpoint

最后,就该创建文明的入站端点(Ingress Endpoint),它就像一个实时的入站邮件处理程序,根据 Traffic policy 来过滤好处理的邮件,再根据 RuleSet 来进行处理、转发、存档等操作。

这里只需要将我们之前创建的 Policy 和 RuleSet 进行链接即可。完成后,打开其详情页,就可以看到我们需要添加的 MX 记录:

它是一个类似“890123abcdef.ghijk.mail-manager-smtp.amazonaws.com”这样的域名。最后,我们根据使用的 DNS 服务,添加这条 MX 记录。

测试

在这个配置中,我们设置的 Traffic Policy 中的条件是允许所有以“mail.funai.cloud” 结尾的收件地址。而设置的规则是对于收件地址是“opmt@mail.funai.cloud”的邮件,进行存档。

所以,我们用某个邮件客户端,给“opmt@mail.funai.cloud”这个邮箱地址发邮件,就应该能在存档中看到该邮件。

我们从 SES 控制台菜单栏中选择“Mail Manager” – “DashBoard”进入仪表盘,设置一个设置的时间,首先看到 Ingress endpoints 统计:

这里,可以看到进入这个入站端点处理流程的邮件数。根据我们设置的过滤条件,可以看到这里符合条件的邮件数,和因为不符合条件而拒绝的邮件数。

再看 Rule sets:

这里可以看到我们设置的规则集的执行次数,以及每个规则集中执行的 Action 的个数。但是,需要注意这里的统计有一些延时。

最后,从菜单中,选择“Mail Manager” – “Email achieving”,进入邮件存档的查询页,可以根据时间、标题、发件人、收件人等,对存档等邮件进行查询。

结束语

本篇简单介绍了 Amazon SES 服务中最新提供的 Mail Manager 的功能,以及配置过程。通过本文介绍,我们也能对 Mail Manager 这个功能的其他用途有一点认识,以下是一些可用的场景:

  • 通过 Traffic 策略,对收邮件进行控制,防止垃圾邮件。
  • 通过 Rule sets,可以根据业务需求,针对不同的邮箱设置不同的处理动作,如将所有邮件进行存档;对业务咨询类邮件结合 LLM+RAG 进行自动回复;对售后邮箱收到的邮件自动提取信息并创建工单;将工作邮件发送到 Workmail。

所以,通过这个功能,我们能更好的利用 Amazon SES 服务实现用户触达和反馈,提高用户体验。

本篇作者

买乌

亚马逊云科技解决方案架构师,专注于游戏、媒体和 AI/ML 领域的行业合作伙伴生态,及解决方案的构建。

薛东

亚马逊云科技解决方案架构师,负责基于亚马逊云科技的解决方案设计和构建。加入亚马逊云科技之前曾就职于 EMC,阿里云等 IT 企业,积累了丰富的企业级应用开发和测试的经验。目前在亚马逊云科技大中华区服务媒体和广告行业客户。专注于无服务,安全,生成式 AI 等技术方向。