

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 呼叫 Lambda 函數動作
<a name="receiving-email-action-lambda"></a>

Lambda 動作透過 Lambda 函數來呼叫您的程式碼，且可選擇是否透過 Amazon SNS 通知您。此規則動作具有下列選項和需求：

**選項**
+ **Lambda 函數** -Lambda 函數的 ARN。Lambda 函數 ARN 的範例為 *arn:aws:lambda:us-east-1:account-id:function:MyFunction*。
+ **叫用類型** - Lambda 函數的叫用類型。叫用類型 **RequestResponse** 表示函數執行結果為立即回應。叫用類型 **Event** 表示函數為非同步叫用。建議您使用 **Event** 叫用類型，除非您的使用案例必須使用非同步執行。

  **RequestResponse** 呼叫有 30 秒的逾時。

  如需詳細資訊，請參閱 *AWS Lambda 開發人員指南*中的[叫用 Lambda 函數](https://docs.aws.amazon.com/lambda/latest/dg/lambda-invocation.html)。
+ **SNS Topic** (SNS 主題) - Amazon SNS 主題的名稱或 ARN，用來於指定的 Lambda 函數觸發時通知。Amazon 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)