

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

# 调用 Lambda 函数操作
<a name="receiving-email-action-lambda"></a>

Lambda 操作通过 Lambda 函数调用您的代码，并通过 Amazon SNS 通知您（可选）。此规则操作具有以下选项和要求：

**选项**
+ **Lambda function (Lambda 函数)** – Lambda 函数的 ARN。*Lambda 函数 ARN 的一个例子是 arn: aws: lambda: us-east-1: account-id: function:。MyFunction*
+ **Invocation type (调用类型)** – Lambda 函数的调用类型。调用类型为**RequestResponse**意味着函数的执行会立即得到响应。调用类型 **Event** 意味着该函数是异步调用的。我们建议您使用 **Event** 调用类型，除非您的使用案例中必需同步执行。

  有一个 30 秒的 **RequestResponse** 调用超时时间。

  有关更多信息，请参阅 *AWS Lambda 开发人员指南*中的[调用 Lambda 函数](https://docs.aws.amazon.com/lambda/latest/dg/lambda-invocation.html)。
+ **SNS Topic (SNS 主题)** – 在触发指定的 Lambda 函数时发出通知的 Amazon SNS 主题的名称或 ARN。*亚马逊 SNS 话题 ARN 的一个例子是 arn: aws: sns: us-east-1:123456789012:。MyTopic*有关更多信息，请参阅 *Amazon Simple Notification Service 开发人员指南*中的[创建 Amazon SNS 主题](https://docs.aws.amazon.com/sns/latest/dg/CreateTopic.html)。

**要求**
+ 您选择的 Lambda 函数必须与您用于接收电子邮件的 Amazon SES 终端节点位于同一 AWS 区域。
+ 您选择的 Amazon SNS 主题必须与您用于接收电子邮件的 Amazon SES 终端节点位于同一 AWS 区域。

## 编写 Lambda 函数
<a name="receiving-email-action-lambda-function"></a>

处理电子邮件时，可以异步调用 Lambda 函数（即使用 `Event` 调用类型）。传递给 Lambda 函数的事件对象将包含与入站电子邮件事件有关的元数据。您还可以使用元数据从 Amazon S3 存储桶访问消息内容。

如果需要实际控制邮件流，则必须同步调用 Lambda 函数（即使用 `RequestResponse` 调用类型），并且 Lambda 函数必须用两个参数调用 `callback` 方法：第一个参数是 `null`，第二个参数是 `disposition` 属性，它的值设置为 `STOP_RULE`、`STOP_RULE_SET` 或 `CONTINUE`。如果第二个参数为 `null` 或没有有效的 `disposition` 属性，则邮件流将继续，并处理接下来的操作和规则，这与 `CONTINUE` 相同。

例如，您可以通过在 Lambda 函数代码的结尾写入以下行来停止接收规则集：

```
callback( null, { "disposition" : "STOP_RULE_SET" });
```

有关 AWS Lambda 代码示例，请参阅[Lambda 函数示例](receiving-email-action-lambda-example-functions.md)。有关高级使用案例的示例，请参阅[使用案例示例](receiving-email-action-lambda-example-use-cases.md)。

### 输入格式
<a name="receiving-email-action-lambda-input"></a>

Amazon SES 以 JSON 格式向 Lambda 函数传送信息。顶级对象包含一个 `Records` 数组，其中包含属性 `eventSource`、`eventVersion` 和 `ses`。`ses` 对象包含 `receipt` 和 `mail` 对象，这些对象的格式与[通知内容](receiving-email-notifications-contents.md)中所述的 Amazon SNS 通知中的格式完全相同。

Amazon SES 传递给 Lambda 的数据包括有关邮件的元数据，以及多个电子邮件标头。但是，不包含邮件的正文。

下面是 Amazon SES 提供给 Lambda 函数的输入结构的概括视图。

```
{
   "Records": [
      {
        "eventSource": "aws:ses",
        "eventVersion": "1.0",
        "ses": {
           "receipt": {
               <same contents as SNS notification>
            },
           "mail": {
               <same contents as SNS notification>
           }
         }
     }
   ]
}
```

### 返回值
<a name="receiving-email-action-lambda-function-return-values"></a>

您的 Lambda 函数可以通过返回以下值之一来控制邮件流：
+ `STOP_RULE` – 当前接收规则中没有进一步操作需要处理，但可以处理后续的接收规则。
+ `STOP_RULE_SET` – 没有后续操作或接收规则需要处理。
+ `CONTINUE` 或任何其他无效值 – 这意味着可以处理后续操作和接收规则。

**Topics**
+ [编写 Lambda 函数](#receiving-email-action-lambda-function)
+ [传入电子邮件事件示例](receiving-email-action-lambda-event.md)
+ [使用案例示例](receiving-email-action-lambda-example-use-cases.md)
+ [Lambda 函数示例](receiving-email-action-lambda-example-functions.md)