

终止支持通知：2027 年 3 月 31 日， AWS 将终止对亚马逊 WorkMail的支持。2027 年 3 月 31 日之后，您将无法再访问亚马逊 WorkMail 控制台或亚马逊 WorkMail 资源。有关更多信息，请参阅 [Amazon WorkMail 终止支持](https://docs.aws.amazon.com/workmail/latest/adminguide/workmail-end-of-support.html)。

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

# 为 Amazon AWS Lambda 进行配置 WorkMail
<a name="lambda"></a>

在入站和出站电子邮件流规则中使用 “**运行 Lambda**” 操作，将符合规则的电子邮件传递给 AWS Lambda 函数进行处理。

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

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

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

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

有关入站和出站电子邮件流规则的更多信息，请参阅[管理电子邮件流](email-flows.md)。有关 Lambda 的更多信息，请参阅 [https://docs.aws.amazon.com/lambda/latest/dg/welcome.html](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html)。

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

## Amazon AWS Lambda 版入门 WorkMail
<a name="start-lambda"></a>

要开始在亚马逊 AWS Lambda 上使用 WorkMail，我们建议将 [ WorkMail Hello World Lambda 函数](https://console.aws.amazon.com/lambda/home#/create/app?applicationId=arn:aws:serverlessrepo:us-east-1:489970191081:applications/workmail-hello-world-python)从部署 AWS Serverless Application Repository 到您的账户。该函数具有所有必要的资源及为您配置的权限。有关更多示例，请参阅上的[amazon-workmail-lambda-templates](https://github.com/aws-samples/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，请参阅《[https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html)。

## 配置同步**运行 Lambda** 规则
<a name="synchronous-rules"></a>

要配置同步**运行 Lambda** 规则，请使用**运行 Lambda** 操作创建电子邮件流规则，然后选中**同步运行**复选框。有关创建邮件流规则的更多信息，请参阅[创建电子邮件流规则](create-email-rules.md)。

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

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

****Rule timeout (规则超时)**（以分钟为单位）**  
如果亚马逊 WorkMail 无法调用 Lambda 函数，则重试该函数的时间段。在此时间段结束时将应用 **Fallback action (回退操作)**。

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

## Lambda 事件数据
<a name="lambda-data"></a>

使用以下事件数据触发 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** 响应架构
<a name="synchronous-schema"></a>

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

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

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

响应 JSON 包含以下数据。

**action**  
要为收件人执行的操作。

**类型**  
操作类型。对于异步**运行 Lambda** 操作，不会返回操作类型。  
入站规则操作类型包括 **BOUNCE**、**DROP**、**DEFAULT**、**BYPASS\_SPAM\_CHECK** 和 **MOVE\_TO\_JUNK**。有关更多信息，请参阅 [入站电子邮件规则操作](email-flows.md#email-flows-rule-actions)。  
出站规则操作类型包括 **BOUNCE**、**DROP** 和 **DEFAULT**。有关更多信息，请参阅 [出站电子邮件规则操作](email-flows.md#email-flows-rule-outbound)。

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

**recipients**  
应对其执行操作的电子邮件地址的列表。可以向响应添加新的收件人，即使这些新收件人未包含在原始收件人列表中也是如此。如果操作的 **allRecipients** 为 true，则不需要此字段。  
当为入站电子邮件调用 Lambda 操作时，您只能添加来自贵组织的新收件人。新收件人将作为 **BCC (密件抄送)** 添加到响应中。

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

### 同步**运行 Lambda** 操作限制
<a name="synchronous-limits"></a>

**当亚马逊为同步运行 Lambda 操作 WorkMail 调用 Lambda 函数时，以下限制适用：**
+ Lambda 函数必须在 15 秒内进行响应，否则将被视为失败的调用。
**注意**  
系统将按照您指定的**规则超时**间隔重试调用。
+ Lambda 函数响应的最大允许大小为 256 KB。
+ 响应最多可包含 10 个唯一操作。10 个以外的操作将受配置的 **Fallback action (回退操作)** 的约束。
+ 出站 Lambda 函数最多允许 500 个收件人。
+ **Rule timeout (规则超时)** 的最大值为 240 分钟。如果将最小值配置为 0，则在 Amazon WorkMail 应用回退操作之前无需重试。

### 同步**运行 Lambda** 操作失败
<a name="synchronous-failures"></a>

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

## 同步**运行 Lambda** 响应示例
<a name="synchronous-responses"></a>

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

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

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

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

```
{
    "actions" : [
      {
        "action" : {
          "type": 'BOUNCE',
          "parameters": {
            "bounceMessage" : "{{Email in breach of company policy.}}"
          }
        },
        "allRecipients": true
      }
    ]
}
```

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

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

[有关为运行 Lambda 操作创建 Lambda 函数时要使用的更多代码示例，请参阅亚马逊 **Lambda** 模板。 WorkMail ](https://github.com/aws-samples/amazon-workmail-lambda-templates)

## 有关在亚马逊上使用 Lambda 的更多信息 WorkMail
<a name="lambda-more"></a>

您还可以访问触发 Lambda 函数的电子邮件的完整内容。有关更多信息，请参阅 [使用检索消息内容 AWS Lambda](lambda-content.md)。