

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

# 自動暫停整個 Amazon SES 帳戶的電子郵件傳送功能
<a name="monitoring-sender-reputation-pausing-account"></a>

本節中的程序將說明設定 Amazon SES、Amazon SNS、Amazon CloudWatch、以及 AWS Lambda 的步驟，以在單一 AWS 區域內自動暫停 Amazon SES 帳戶的電子郵件傳送功能。如果您從多個區域傳送電子郵件，請在您想要採取此解決方案的每個區域內重複操作本節的程序。

**Topics**
+ [第 1 部分：建立 IAM 角色](#monitoring-sender-reputation-pausing-account-part-1)
+ [第 2 部分：建立 Lambda 函數](#monitoring-sender-reputation-pausing-account-part-2)
+ [第 3 部分：為帳戶重新啟用電子郵件傳送](#monitoring-sender-reputation-pausing-account-part-3)
+ [第 4 部分：建立 Amazon SNS 主題與訂閱](#monitoring-sender-reputation-pausing-account-part-4)
+ [第 5 部分：建立 CloudWatch 警示](#monitoring-sender-reputation-pausing-account-part-5)
+ [第 6 部分：測試解決方案](#monitoring-sender-reputation-pausing-account-part-6)

## 第 1 部分：建立 IAM 角色
<a name="monitoring-sender-reputation-pausing-account-part-1"></a>

設定電子郵件傳送自動暫停的第一步為建立可執行 `UpdateAccountSendingEnabled` API 作業的 IAM 角色。

**建立 IAM 角色**

1. 在以下網址開啟 IAM 主控台：[https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)。

1. 在導覽窗格中，選擇**角色**。

1. 選擇 **Create Role** (建立角色)。

1. 在**選取受信任實體**頁面上，針對**受信任實體的類型**選擇 **AWS 服務**。

1. 在 **Use case (使用案例)** 下，選擇 **Lambda**，然後選擇 **Next (下一步)**。

1. 在 **Add permissions (新增許可)** 頁面上，選擇以下政策：
   + **AWSLambdaBasicExecutionRole**
   + **AmazonSESFullAccess**
**提示**  
使用 **Permission policies (許可政策)** 下方的搜尋方塊快速查找這些政策，但請注意，在搜尋並選擇第一個政策後，必須選擇 **Clear filters (清除篩選條件)**，然後才能再搜尋並選擇第二個政策。

   然後選擇**下一步**。

1. 在 **Name, review, and create (命名、檢閱和建立)** 頁面，在 **Role details (角色詳細資訊)** 下方的 **Role name (角色名稱)** 欄位中，為政策輸入一個有意義的名稱。

1. 確認您選取的兩個政策都有列在 **Permissions policy summary (許可政策摘要)** 表格中，然後選擇 **Create role (建立角色)**。

## 第 2 部分：建立 Lambda 函數
<a name="monitoring-sender-reputation-pausing-account-part-2"></a>

建立 IAM 角色後，即可建立 Lambda 函數，用於暫停帳戶的電子郵件傳送功能。

**建立 Lambda 函數**

1. 在 https：//[https://console.aws.amazon.com/lambda/](https://console.aws.amazon.com/lambda/) 開啟 AWS Lambda 主控台。

1. 使用區域選擇工具來選擇您要部署此 Lambda 函數的區域。
**注意**  
此函數只會在您在此步驟中選取 AWS 的區域中暫停電子郵件傳送。如果您從超過一個區域傳送電子郵件，請在您想要自動暫停由件傳送的每個區域內重複操作本節的程序。

1. 選擇**建立函數**。

1. 在 **Create function (建立函式)** 下，選擇 **Author from scratch (從頭開始撰寫)**。

1. 在 **Basic information (基本資訊)** 下，完成下列步驟：
   + 至於 **Function name (函數名稱)**，輸入 Lambda 函數的名稱。
   + 針對**執行期**，選擇 **Node.js 18x** (或選擇清單中目前提供的版本)。
   + 至於 **Architecture (架構)**，保留預先選取的預設值 **x86\$164**。
   + 在 [Permissions (許可)] 下方，展開 **Change default execution role (變更預設執行角色)**，然後選擇 **se an existing role (使用現有角色)**。
   + 在 **Existing role (現有角色)** 清單方塊中按一下，然後選擇您在[第 1 部分：建立 IAM 角色](#monitoring-sender-reputation-pausing-account-part-1)中建立的 IAM 角色。

   然後，請選擇 **Create function (建立函數)**。

1. 在程式碼編輯器的 **Code source (程式碼來源)** 下，貼上下列程式碼：

   ```
   'use strict';
   
   
   const { SES } = require("@aws-sdk/client-ses")
   
   // Create a new SES object. 
   
   var ses = new SES({});                  
   
   // Specify the parameters for this operation. In this case, there is only one
   // parameter to pass: the Enabled parameter, with a value of false
   // (Enabled = false disables email sending, Enabled = true enables it).
   var params = {
       Enabled: false
   };
   
   exports.handler = (event, context, callback) => {
       // Pause sending for your entire SES account
       ses.updateAccountSendingEnabled(params, function(err, data) {
           if(err) {
               console.log(err.message);
           } else {
               console.log(data);
           }
       });
   };
   ```

   然後選擇 **Deploy (部署)**。

1. 選擇**測試**。若出現 **Configure test event (設定測試事件)** 視窗，請在 **Event name (事件名稱)** 欄位中輸入名稱，然後選擇 **Save (儲存)**。

1. 展開 **Test (測試)** 下拉式方塊，選取您剛建立的事件的名稱，然後選擇 **Test (測試)**。

1. **Execution results (執行結果)** 索引標籤隨即會顯示 - 就在其右下方，確保已顯示 `Status: Succeeded`。如果函數無法執行，請執行下列動作：
   + 請確認您在 [第 1 部分：建立 IAM 角色](#monitoring-sender-reputation-pausing-account-part-1) 中建立的 IAM 角色包含正確政策。
   + 確定 Lambda 函數中的程式碼不包含任何錯誤。Lambda 程式碼編輯工具會自動將語法錯誤和其他潛在的問題反白。

## 第 3 部分：為帳戶重新啟用電子郵件傳送
<a name="monitoring-sender-reputation-pausing-account-part-3"></a>

在 [第 2 部分：建立 Lambda 函數](#monitoring-sender-reputation-pausing-account-part-2) 中測試 Lambda 函數的副作用為 Amazon SES 帳戶的電子郵件傳送功能將暫停。在大部分情況下，在 CloudWatch 警示觸發前不會讓帳戶的傳送暫停。

本節中的程序用於將為 Amazon SES 帳戶重新啟用電子郵件傳送功能。若要完成這些程序，您必須安裝並設定 AWS Command Line Interface。如需詳細資訊，請參閱[「AWS Command Line Interface 使用者指南」](https://docs.aws.amazon.com/cli/latest/userguide/)。

**若要重新啟用電子郵件傳送**

1. 在命令列輸入以下命令，來重新啟用您帳戶的電子郵件傳送。以您要重新啟動電子郵件傳送的區域名稱來取代 *sending\$1region*。

   ```
   aws ses update-account-sending-enabled --enabled --region sending_region
   ```

1. 在命令列輸入以下命令，來檢查您帳戶的電子郵件傳送狀態：

   ```
   aws ses get-account-sending-enabled --region sending_region
   ```

   如果您看到以下輸出，則代表您已成功重新啟用帳戶的電子郵件傳送：

   ```
   {
       "Enabled": true 
   }
   ```

## 第 4 部分：建立 Amazon SNS 主題與訂閱
<a name="monitoring-sender-reputation-pausing-account-part-4"></a>

若要讓 CloudWatch 在警示觸發時執行 Lambda 函數，您必須先建立 Amazon SNS 主題並為其訂閱該 Lambda 函數。

**建立 Amazon SNS 主題並為其訂閱該 Lambda 函數**

1. 在 [https://console.aws.amazon.com/sns/v3/home](https://console.aws.amazon.com/sns/v3/home) 開啟 Amazon SNS 主控台。

1. 按照《*Amazon Simple Notification Service 開發人員指南*》中的步驟來[建立主題](https://docs.aws.amazon.com/sns/latest/dg/sns-create-topic.html)。

   1. **Type** (類型) 必須是 **Standard** (標準) (而非 **FIFO**)。

1. 按照《*Amazon Simple Notification Service 開發人員指南*》中的步驟來[訂閱主題](https://docs.aws.amazon.com/sns/latest/dg/sns-create-subscribe-endpoint-to-topic.html)。

   1. 針對 **Protocol** (通訊協定)，選擇 **AWS Lambda**。

   1. 針對 **Endpoint (端點)**，選擇您在「[第 2 部分：建立 Lambda 函數](#monitoring-sender-reputation-pausing-account-part-2)」中建立的 Lambda 函數。

## 第 5 部分：建立 CloudWatch 警示
<a name="monitoring-sender-reputation-pausing-account-part-5"></a>

本節包含在 CloudWatch 中建立警示的程序，在指標達到特定閾值時將會觸發警示。觸發警示時，它便會將通知遞送到您在「[第 4 部分：建立 Amazon SNS 主題與訂閱](#monitoring-sender-reputation-pausing-account-part-4)」中建立的 Amazon SNS 主題，接著執行您在「[第 2 部分：建立 Lambda 函數](#monitoring-sender-reputation-pausing-account-part-2)」中建立的 Lambda 函數。

**建立 CloudWatch 警示**

1. 透過 [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/) 開啟 CloudWatch 主控台。

1. 使用區域選擇工具來選擇您要自動暫停郵件傳送的區域。

1. 在導覽窗格中，選擇 **Alarms** (警示)。

1. 選擇**建立警示** 。

1. 在 **Create Alarm (建立警示)** 視窗的 **SES Metrics (SES 指標)** 下，選擇 **Account Metrics (帳戶指標)**。

1. 在 **Metric Name (指標名稱)** 下，選擇下列其中一個選項：
   + **Reputation.BounceRate** - 若您想要在帳戶的整體硬退信率超過您所定義的閾值時暫停帳戶的電子郵件傳送，請選擇此指標。
   + **Reputation.ComplaintRate** - 若您想要在帳戶的整體投訴率超過您所定義的閾值時暫停帳戶的電子郵件傳送，請選擇此指標。

   選擇**下一步**。

1. 請完成下列步驟：
   + 在 **Alarm Threshold (警示閾值)** 下，針對 **Name (名稱)**，輸入警示的名稱。
   + 在 **Whenever: Reputation.BounceRate** 或 **Whenever: Reputation.ComplaintRate** 下，指定觸發警示的閾值。
**注意**  
如果您的退信率超過 5%，或您的投訴率超過 0.1%，您的帳戶會自動列入審核。當您指定觸發 CloudWatch 警示的退信率或投訴率時，建議您使用低於這些比率的數值，以避免帳戶列入審核。
   + 在**動作**下的 **每當此警示**，選擇**狀態為警示**。針對 **Send notification to (傳送通知至)**，選擇您在「[第 4 部分：建立 Amazon SNS 主題與訂閱](#monitoring-sender-reputation-pausing-account-part-4)」中建立的 Amazon SNS 主題。

   選擇**建立警示** 。

## 第 6 部分：測試解決方案
<a name="monitoring-sender-reputation-pausing-account-part-6"></a>

您現在可以測試警示，以確認警示可在進入 `ALARM` 狀態時執行 Lambda 函數。您可以使用 `SetAlarmState` API 操作來暫時變更警示狀態。

本節中的程序為選用，但我們建議您完成程序，以確保正確設定完整的解決方案。

1. 在命令列輸入以下命令，來檢查您帳戶的電子郵件傳送狀態。以區域名稱來取代 *region*。

   ```
   aws ses get-account-sending-enabled --region region
   ```

   如果帳戶的傳送已啟用，會看到以下輸出：

   ```
   {
       "Enabled": true 
   }
   ```

1. 在命令列輸入下列命令，以暫時將警示狀態變更為 `ALARM`：**aws cloudwatch set-alarm-state --alarm-name *MyAlarm* --state-value ALARM --state-reason "Testing execution of Lambda function" --region *region***

   以您在[第 5 部分：建立 CloudWatch 警示](#monitoring-sender-reputation-pausing-account-part-5)中建立的警示名稱來取代前述命令中的 *MyAlarm*，並以您想要自動暫停電子郵件傳送的區域來取代 *region*。
**注意**  
當您執行此命令時，警示狀態將從 `OK` 切換為 `ALARM`，然後在數秒後回到 `OK`。您可以在 CloudWatch 主控台的警示 **History (歷程記錄)** 索引標籤中檢視狀態的變更，或使用 [DescribeAlarmHistory](https://docs.aws.amazon.com/AmazonCloudWatch/latest/APIReference/API_DescribeAlarmHistory.html) 作業來查看。

1. 在命令列輸入以下命令，來檢查您帳戶的電子郵件傳送狀態。

   ```
   aws ses get-account-sending-enabled --region region
   ```

   如果 Lambda 函數成功執行，您會看到以下輸出：

   ```
   {
       "Enabled": false
   }
   ```

1. 完成 [第 3 部分：為帳戶重新啟用電子郵件傳送](#monitoring-sender-reputation-pausing-account-part-3) 中的步驟以重新啟用帳戶的電子郵件傳送。