如何在 Amazon SES 中阻止来自特定域或电子邮件地址的电子邮件?

上次更新日期:2019 年 9 月 4 日

我不希望我的 Amazon Simple Email Service(Amazon SES)身份接收来自特定域或电子邮件地址的电子邮件。如何阻止这些电子邮件?

简短描述

要阻止特定域或电子邮件地址向您的 Amazon SES 身份发送电子邮件,请执行以下步骤:

1.    创建一个 AWS Lambda 函数来处理传入的电子邮件,审核发件人,然后在发件人与特定的域或电子邮件地址匹配时丢失邮件。

2.    创建一个将所有传入电子邮件路由到 Lambda 函数的 Amazon SES 接收规则。

3.    检查该函数的 Amazon CloudWatch Logs 以验证电子邮件被阻止。

注意:向 Amazon SES 接收规则添加 Lambda 操作将会产生 Amazon SES 和 Lambda 费用。

解决方法

创建 AWS Lambda 函数

1.     打开 AWS Lambda 控制台

2.    在导航栏上的区域选择器中,选择您正在使用 Amazon SES 的 AWS 区域。Lambda 函数必须位于您使用 Amazon SES 的区域。有关更多信息,请参阅调用 Lambda 函数操作

3.    选择 Create function(创建函数)。

4.    选择从头开始创建

5.    对于名称,输入函数名称。例如,您可以输入“SESReceiptRule”。

6.    对于运行时,请选择 Node.js 10.x

7.    在权限下,展开选择或创建执行角色

8.    对于执行角色,请选择创建具有基本 Lambda 权限的新角色

9.    选择创建函数

10.    在函数代码下,输入以下代码:

// 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.    在 Environment variables(环境变量)下,对于 Key(键),输入“blockingList”。

注意:只要总大小不超过 4 KB,您可以创建的环境变量数没有限制。有关更多信息,请参阅使用 AWS Lambda 环境变量

12.    对于“blockingList”的 Value(值),输入要阻止的电子邮件地址和域的逗号分隔列表。例如,输入“example.com, JohnDoe@example.com”。

注意:您无需更改 Lambda 函数代码即可编辑电子邮件地址和域列表。

13.    选择 Save(保存)。

创建 Amazon SES 接收规则

1.    打开 Amazon SES 控制台

2.    在导航窗格中的 Email Receiving (电子邮件接收) 下面,选择 Rule Sets (规则集)

3.    如果要将规则添加到现有活动规则集,请跳至步骤 4。要创建新规则集,请选择 Create a Rule Set (创建规则集),输入规则集名称,然后选择 Create a Rule Set (创建规则集)

注意:如果创建了新规则集,请确保选择它,然后选择 Set as Active Rule Set (设置为活动规则集)

4.    选择 View Active Rule Set(查看活动规则集)。

5.    选择 Create Rule(创建规则)。

注意:您还可以选择使用以下步骤中描述的相同值更新现有规则。

6.    对于收件人,请输入与您的 Amazon SES 身份关联的电子邮件地址或域。

重要说明:输入您要阻止其接收来自特定发件人的电子邮件的电子邮件地址或域。请勿输入要阻止其发送的电子邮件的电子邮件地址或域。例如,如果您的 Amazon SES 身份使用的电子邮件地址为“JaneRoe@example.net”,而您要阻止来自“example.com”的电子邮件,则应输入“JaneRoe@example.net”。

7.    选择下一步

8.    在操作下,找到添加操作,选择 Lambda。然后,填写以下字段:
对于 Lambda 函数,请选择您创建的函数。
对于调用类型,请选择 RequestResponse
(可选)根据使用案例的需要配置 SNS 主题。您也可将此字段留空。有关此字段的更多信息,请参阅 Lambda 操作

9.    选择下一步

10.    在规则详细信息中,填写以下字段:
对于 Rule name (规则名称),为您的规则输入一个名称。
对于 Enabled (启用),请确保选中此复选框,以便将此规则创建为活动规则。
(可选)选择 Require TLS (需要 TLS)Enable spam and virus scanning (启用垃圾邮件和病毒扫描)(如果您的使用案例需要)。
对于 Rule set (规则集),验证您的活动规则集是否已选中。活动规则集的名称中包含 (Active) (活动) 字样。
对于 Insert after rule(在规则后插入),请在规则集中选择所需的规则位置。

11.    选择下一步

12.    选择 Create Rule(创建规则)。

注意:如果您看到权限缺失对话框并显示消息“SES 无法访问 [您的 Lambda 函数]中的资源”,则说明 Amazon SES 需要调用该函数的权限。您可以选择添加权限以配置所需的权限。

检查该函数的 Amazon CloudWatch Logs

设置 Lambda 函数和 Amazon SES 规则后,请按照以下步骤验证被阻止的电子邮件:

1.    打开 CloudWatch 控制台

2.    从导航窗格中,选择 Logs (日志)

3.    从日志组列表中,选择 Lambda 函数的日志组。例如,选择 /aws/lambda/name_of_your_function

4.    选择要检查的日志流。日志流显示 Lambda 函数正在处理的电子邮件和域,类似于以下内容:

14:08:25 START RequestId: aa939984-1b9b-11e7-83d2-efc6877bdc9b Version: $LATEST
14: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

这篇文章对您有帮助吗?


您是否需要账单或技术支持?