如何在 Amazon SES 中封鎖某些網域或電子郵件地址的電子郵件?

3 分的閱讀內容
0

我不想要 Amazon Simple Email Service (Amazon SES) 身分去接收某些網域或電子郵件地址的電子郵件。

簡短說明

若要防止某些網域或電子郵件地址傳送電子郵件到您的 Amazon SES 身分,請完成下列步驟:

  1. 建立 AWS Lambda 函數。設定函數以處理傳入的電子郵件,評估寄件者,如果寄件者符合特定網域或電子郵件地址,則捨棄該訊息。
  2. 建立 Amazon SES 接收規則,將所有傳入的電子郵件遞送至 Lambda 函數。
  3. 檢查函數的 Amazon CloudWatch Logs 以驗證電子郵件是否遭到封鎖。

**注意事項:**您在 Amazon SES 接收規則上新增 Lambda 動作時,即會產生 Amazon SES 和 Lambda 費用。

解決方法

建立 Lambda 函數

1.    開啟 AWS Lambda 主控台。選取您用於 Amazon SES 的 AWS 區域。Lambda 函數必須位於與 Amazon SES 搭配使用的相同 AWS 區域中。如需詳細資訊,請參閱調用 Lambda 函數動作

2.    選擇「建立函數」。

3.    選取「從頭開始撰寫」。

4.    針對「函數名稱」,輸入函數的名稱。例如,輸入「SESReceiptRule」。

5.    針對「執行期」,選取函數的語言。在此範例中選取 Node.js 14.x

6.    針對「架構」,選擇函數程式碼的架構。

7.    在「權限」下,展開「變更預設執行角色」。

8.    針對「執行角色」,選取「使用基本 Lambda 權限建立新角色」。

9.    選擇「建立函數」。

10.    在「程式碼來源」區段的 index.js 索引標籤下,輸入下列程式碼:

// Copyright 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved.// SPDX-License-Identifier: MIT-0
'use strict';

const AWS = require('aws-sdk');

exports.handler = (event, context, callback) => {
    console.log('Blocking email filter starting');
    const sesNotification = event.Records[0].ses;
    const messageId = sesNotification.mail.messageId;
    const receipt = sesNotification.receipt;
    const mail = sesNotification.mail;

    // Convert the environment variable into array. Clean spaces from it.
    var blockingListString = process.env.blockingList;
    blockingListString = blockingListString.replace(/\s/g,'');
    var blockingListArray = blockingListString.split(",");

    // Check if the mail source matches with any of the email addresses or domains defined in the environment variable
    function isListed() {
        var length = blockingListArray.length;
        for(var i = 0; i < length; i++) {
            if (mail.source.endsWith(blockingListArray[i]))
                return true;
        }
        return false;
    }
    console.log('Processing message:', messageId);

        // Processing the message
    if (isListed()) {
            callback(null, {'disposition':'STOP_RULE_SET'});
            console.log('Rejecting messageId: ', messageId, ' - Source: ', mail.source, ' - Recipients: ',receipt.recipients,' - Subject: ', mail.commonHeaders['subject']);
    }
    else {
        console.log('Accepting messageId:', messageId, ' - Source: ', mail.source, ' - Recipients: ',receipt.recipients,' - Subject: ', mail.commonHeaders['subject']);
        callback();
    }
};

11.    在環境變數下,針對「索引鍵」,輸入「blockingList」。
**注意事項:**您可以建立的環境變量的數量沒有限制。規則集的大小總計不得超過 4 KB。如需詳細資訊,請參閱使用 AWS Lambda 環境變數

12.    針對「blockingList」的「」,輸入您想要封鎖的電子郵件地址和網域的逗點分隔清單。例如,輸入「example.com、JohnDoe@example.com」。
**注意事項:**您不需要變更 Lambda 函數程式碼,即可編輯電子郵件地址和網域的清單。

13.    選擇「檔案」,然後選擇「儲存」。

建立 Amazon SES 接收規則

  1. 開啟 Amazon SES 主控台
  2. 在導覽窗格中,選擇「電子郵件接收」。
  3. 如果您想要將規則新增至現有的作用中規則集,則請跳至步驟 4。若要建立新的規則集,請選擇「建立規則集」,輸入規則集名稱,然後選擇「建立規則集」。
    **注意事項:**如果您建立新的規則集,則請務必選取該規則集,然後選擇「設為作用中的規則集」。
  4. 選擇「檢視作用中的規則集
  5. 選擇「建立規則」。
    **注意事項:**您還可以選擇使用下列步驟中所述的相同值來更新現有的規則。
  6. 針對「定義規則設定」,輸入下列資訊:
    針對「規則名稱」,輸入規則的名稱。
    針對「狀態」,核取「已啟用」方塊,以將規則建立為作用中規則。然後,選擇「下一步」。
  7. 針對「收件者條件」,選擇「新增收件者條件」。
  8. 針對「收件者條件」,輸入與 Amazon SES 身分相關聯的電子郵件地址或網域。然後,選擇「下一步」。
    **重要事項:**輸入您想要防止從特定寄件者接收電子郵件的電子郵件地址或網域。請勿輸入您想要封鎖其電子郵件的電子郵件地址或網域。例如,如果您的 Amazon SES 身分使用電子郵件地址「JaneRoe@example.net」,而您想要封鎖來自「example.com」的電子郵件,則請輸入「JaneRoe@example.net」。
  9. 在「新增動作」畫面的「新增動作」下,選取「調用 AWS Lambda 函數」。然後,輸入下列資訊:
    針對「Lambda 函數」,選取您建立的函數。
    針對「調用類型」,選取 RequestResponse
    (選用) 因為您的使用案例要求,請設定「SNS 主題」。或者,您可以將此欄位保留空白。如需此欄位的詳細資訊,請參閱調用 Lambda 函數動作。然後,選擇「下一步」。
  10. 選擇「建立規則」。
    **注意事項:**您可能會收到「遺漏權限」對話方塊,訊息為「SES 無法存取資源[您的 Lambda 函數]。」 該錯誤表示 Amazon SES 需要該函數的權限。選擇「新增權限」以設定必要權限。

檢查該函數的 CloudWatch 日誌

設定 Lambda 函數和 Amazon SES 規則後,請遵循下列步驟以驗證電子郵件是否遭到封鎖:

1.    開啟 CloudWatch 主控台

2.    從導覽窗格的「日誌」下,選擇「日誌群組」。

3.    從日誌群組清單中,選擇 Lambda 函數的日誌群組。例如,選擇 /aws/lambda/name_of_your_function

4.    在「日誌串流」下,選擇您想要檢查的日誌串流。日誌串流會顯示 Lambda 函數正在處理的電子郵件訊息和網域。它看起來類似於下列範例:

14:08:25 START RequestId: aa939984-1b9b-11e7-83d2-efc6877bdc9b Version: $LATEST14:08:25 2017-04-07T14:08:25.957Z aa939984-1b9b-11e7-83d2-efc6877bdc9b Blocking email filter starting
14:08:25 2017-04-07T14:08:25.958Z aa939984-1b9b-11e7-83d2-efc6877bdc9b Processing message: jc0iurgrtkrsrs7f5pk0rsmf4r3q0poikdjfdi01
14:08:25 2017-04-07T14:08:25.959Z aa939984-1b9b-11e7-83d2-efc6877bdc9b Rejecting messageId: jc0iurgrtkrsrs7f5pk0rsmf4r3q0poikdjfdi01 - Source:
user@example.com - Recipients: [ 'user@domain.com' ] - Subject: This is an unwanted message
14:08:25 END RequestId: aa939984-1b9b-11e7-83d2-efc6877bdc9b

相關資訊

開始使用 Lambda

使用接收規則的收件者控制

AWS 官方
AWS 官方已更新 6 個月前