为 Amazon AWS Lambda 进行配置 WorkMail - Amazon WorkMail

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

为 Amazon AWS Lambda 进行配置 WorkMail

在入站和出站电子邮件流规则中使用运行 Lambda 操作,以将与规则匹配的电子邮件传递到 AWS Lambda 函数进行处理。

从以下配置中选择 “在亚马逊上运行 Lambda” 操作。 WorkMail

同步运行 Lambda 配置

在发送或传送与流规则匹配的电子邮件之前,会先将此电子邮件传递给 Lambda 函数进行处理。使用此配置修改电子邮件内容。您还可以针对不同的使用案例控制入站或出站电子邮件流。例如,传递到 Lambda 函数的规则可以阻止敏感电子邮件的传送、删除附件或添加免责声明。

异步运行 Lambda 配置

在发送或传送与流规则匹配的电子邮件时,会将此电子邮件传递给 Lambda 函数进行处理。此配置不会影响电子邮件传递,并且用于收集入站或出站电子邮件的指标等任务。

无论您选择同步配置还是异步配置,传递到 Lambda 函数的事件对象都包含入站或出站电子邮件事件的元数据。您还可以使用元数据中的邮件 ID 来访问电子邮件的全部内容。有关更多信息,请参见 使用 AWS Lambda 检索消息内容。有关电子邮件事件的更多信息,请参阅 Lambda 事件数据

有关入站和出站电子邮件流规则的更多信息,请参阅管理电子邮件流。有关 Lambda 的更多信息,请参阅 AWS Lambda 开发人员指南

注意

目前,Lambda 电子邮件流规则仅引用同一 AWS 区域和正在配置的亚马逊 WorkMail 组织中的 Lambda 函数。AWS 账户

Amazon AWS Lambda 版入门 WorkMail

要开始在亚马逊AWS Lambda上使用 WorkMail,我们建议将 WorkMail Hello World Lambda 函数从部署AWS Serverless Application Repository到您的账户。该函数具有所有必要的资源及为您配置的权限。有关更多示例,请参阅上的amazon-workmail-lambda-templates存储库 GitHub。

如果您选择创建自己的 Lambda 函数,则必须使用 AWS Command Line Interface (AWS CLI) 配置权限。在以下示例命令中,请执行以下操作:

  • MY_FUNCTION_NAME 替换为您的 Lambda 函数的名称。

  • REGION替换为您的 WorkMail Amazon AWS 区域。可用的 Amazon WorkMail 区域包括us-east-1(美国东部(弗吉尼亚北部))、us-west-2(美国西部(俄勒冈))和eu-west-1(欧洲(爱尔兰))。

  • AWS_ACCOUNT_ID 替换为您的 12 位 AWS 账户 ID。

  • WORKMAIL_ORGANIZATION_ID用您的亚马逊 WorkMail组织编号替换。您可以在组织页面上贵组织对应的卡上找到该 ID。

aws --region REGION lambda add-permission --function-name MY_FUNCTION_NAME --statement-id AllowWorkMail --action "lambda:InvokeFunction" --principal workmail.REGION.amazonaws.com --source-arn arn:aws:workmail:REGION:AWS_ACCOUNT_ID:organization/WORKMAIL_ORGANIZATION_ID

有关使用 AWS CLI 的更多信息,请参阅 AWS Command Line Interface 用户指南

配置同步运行 Lambda 规则

要配置同步运行 Lambda 规则,请使用运行 Lambda 操作创建电子邮件流规则,然后选中同步运行复选框。有关创建邮件流规则的更多信息,请参阅创建电子邮件流规则

要完成同步规则的创建操作,请添加 Lambda Amazon 资源名称 (ARN) 并配置以下选项。

Fallback action (回退操作)

当 Lambda 函数运行失败时,亚马逊将 WorkMail 应用该操作。如果未设置 allRecipients 标志,则此操作也适用于 Lambda 响应中省略的任何收件人。回退操作不能是另一项 Lambda 操作。

Rule timeout (规则超时)(以分钟为单位)

如果亚马逊 WorkMail 无法调用 Lambda 函数,则重试该函数的时间段。在此时间段结束时将应用 Fallback action (回退操作)

注意

同步运行 Lambda 规则仅支持 * 目标条件。

Lambda 事件数据

使用以下事件数据触发 Lambda 函数。数据的呈现方式会有所不同,具体取决于用于 Lambda 函数的编程语言。

{ "summaryVersion": "2018-10-10", "envelope": { "mailFrom" : { "address" : "from@example.com" }, "recipients" : [ { "address" : "recipient1@example.com" }, { "address" : "recipient2@example.com" } ] }, "sender" : { "address" : "sender@example.com" }, "subject" : "Hello From Amazon WorkMail!", "messageId": "00000000-0000-0000-0000-000000000000", "invocationId": "00000000000000000000000000000000", "flowDirection": "INBOUND", "truncated": false }

事件 JSON 包含以下数据。

summaryVersion

LambdaEventData 的版本号。仅当您在 LambdaEventData 中进行向后不兼容的更改时,此数据才会更新。

envelope

电子邮件的信封,其中包括以下字段:

mailFrom

From (发件人) 地址,它通常是发送电子邮件的用户的电子邮件地址。如果该用户以其他用户名义或代表其他用户发送电子邮件,则 mailFrom 字段返回代表其发送电子邮件的用户的电子邮件地址,而不是实际发件人的电子邮件地址。

recipients

收件人电子邮件地址的列表。Amazon WorkMail 不区分 “收件人”、“抄送” 或 “密件抄送”。

注意

对于入站电子邮件流规则,此列表包括您在其中创建规则的 Amazon WorkMail 组织中所有域中的收件人。Lambda 函数会针对发件人的每个 SMTP 会话进行单独调用,并且收件人字段将列出该 SMTP 对话中的收件人。不包括具有外部域的收件人。

sender

代表其他用户发送电子邮件的用户的电子邮件地址。仅在代表其他用户发送电子邮件时设置此字段。

subject

电子邮件主题行。当它超过 256 个字符限制时将被截断。

messageId

在使用 Amazon Message Flow SDK 时,用于访问电子邮件 WorkMail 消息的全部内容的唯一 ID。

invocationId

唯一 Lambda 调用的 ID。当因同一个 Lambda 函数被多次调用时,此 ID 保持不变。LambdaEventData用于检测重试并避免重复。

flowDirection

指示电子邮件流的方向,即 INBOUND (入站)OUTBOUND (出站)

truncated

适用于负载大小,而不是主题行长度。当为 true 时,负载大小超过 128 KB 的上限,因此收件人列表会被截断,以便满足限制。

同步运行 Lambda 响应架构

当具有同步 Run Lambda 操作的电子邮件流规则与入站或出站电子邮件匹配时,Amazon 会 WorkMail 调用配置的 Lambda 函数并等待回复,然后再对电子邮件采取行动。Lambda 函数根据预定义的架构返回响应,该架构列出了操作、操作类型、适用参数以及操作适用的收件人。

以下示例显示了同步运行 Lambda 响应。响应因用于 Lambda 函数的编程语言而异。

{ "actions": [ { "action" : { "type": "string", "parameters": { various } }, "recipients": [list of strings], "allRecipients": boolean } ] }

响应 JSON 包含以下数据。

action

要为收件人执行的操作。

类型

操作类型。对于异步运行 Lambda 操作,不会返回操作类型。

入站规则操作类型包括 BOUNCEDROPDEFAULTBYPASS_SPAM_CHECKMOVE_TO_JUNK。有关更多信息,请参见 入站电子邮件规则操作

出站规则操作类型包括 BOUNCEDROPDEFAULT。有关更多信息,请参见 出站电子邮件规则操作

parameters

其他操作参数。支持 BOUNCE 操作类型作为具有键 bounceMessage 和值 string 的 JSON 对象。此退回邮件用于创建退回电子邮件。

recipients

应对其执行操作的电子邮件地址的列表。可以向响应添加新的收件人,即使这些新收件人未包含在原始收件人列表中也是如此。如果操作的 allRecipients 为 true,则不需要此字段。

注意

当为入站电子邮件调用 Lambda 操作时,您只能添加来自贵组织的新收件人。新收件人将作为 BCC (密件抄送) 添加到响应中。

allRecipients

如果为 true,则将操作应用于不受 Lambda 响应中的其他特定操作约束的所有收件人。

同步运行 Lambda 操作限制

当亚马逊为同步运行 Lambda 操作 WorkMail 调用 Lambda 函数时,以下限制适用:

  • Lambda 函数必须在 15 秒内进行响应,否则将被视为失败的调用。

    注意

    系统将按照您指定的规则超时间隔重试调用。

  • Lambda 函数响应的最大允许大小为 256 KB。

  • 响应最多可包含 10 个唯一操作。10 个以外的操作将受配置的 Fallback action (回退操作) 的约束。

  • 出站 Lambda 函数最多允许 500 个收件人。

  • Rule timeout (规则超时) 的最大值为 240 分钟。如果将最小值配置为 0,则在 Amazon WorkMail 应用回退操作之前无需重试。

同步运行 Lambda 操作失败

如果亚马逊由于错误、响应无效或 Lambda 超时而 WorkMail 无法调用您的 Lambda 函数,则亚马逊会使用指数级退避 WorkMail 重试调用,从而降低处理速率,直到规则超时时间结束。然后,Fallback action (回退操作) 将应用于电子邮件的所有收件人。有关更多信息,请参见 配置同步运行 Lambda 规则

同步运行 Lambda 响应示例

以下示例演示了常见同步运行 Lambda 响应的结构。

例 :从电子邮件中删除指定的收件人

以下示例演示了用于从电子邮件中删除收件人的同步运行 Lambda 响应的结构。

{ "actions": [ { "action": { "type": "DEFAULT" }, "allRecipients": true }, { "action": { "type": "DROP" }, "recipients": [ "drop-recipient@example.com" ] } ] }
例 :退回自定义电子邮件

以下示例演示了用于退回自定义电子邮件的同步运行 Lambda 响应的结构。

{ "actions" : [ { "action" : { "type": 'BOUNCE', "parameters": { "bounceMessage" : "Email in breach of company policy." } }, "allRecipients": true } ] }
例 :将收件人添加到电子邮件

以下示例演示了用于将收件人添加到电子邮件的同步运行 Lambda 响应的结构。这不会更新电子邮件的 To (收件人)CC (抄送) 字段。

{ "actions": [ { "action": { "type": "DEFAULT" }, "recipients": [ "new-recipient@example.com" ] }, { "action": { "type": "DEFAULT" }, "allRecipients": true } ] }

有关为运行 Lambda 操作创建 Lambda 函数时要使用的更多代码示例,请参阅亚马逊 Lambda 模板。 WorkMail

有关在亚马逊上使用 Lambda 的更多信息 WorkMail

您还可以访问触发 Lambda 函数的电子邮件的完整内容。有关更多信息,请参见 使用 AWS Lambda 检索消息内容