如何在 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.    选择创建函数

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.    对于环境变量下的,输入“blockingList”。

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

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

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

13.    选择保存

创建 Amazon SES 接收规则

1.    打开 Amazon SES 控制台

2.    在导航窗格中的电子邮件接收下,选择规则集

3.    如果您要将规则添加到现有的活跃规则集,请跳至步骤 4。要创建新的规则集,请选择创建规则集,输入规则集名称,然后选择创建规则集

注意:如果您创建新的规则集,请务必选中该规则集,然后选择设置为活跃规则集

4.    选择查看活跃规则集

5.    选择创建规则

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

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

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

7.    选择下一步

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

9.    选择下一步

10.    在规则详细信息中,填写以下字段:
对于规则名称,请输入您的规则名称。
请确保选中已启用复选框,以便将规则创建为活动规则。
(可选)根据使用案例的需要,选择需要 TLS启用垃圾邮件和病毒扫描
对于规则集,请验证已选择您的活动规则集。活动规则集的名称中包含 (Active)
对于在规则后插入,请选择您希望该规则在规则集中所处的位置。

11.    选择下一步

12.    选择创建规则

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

检查该函数的 Amazon CloudWatch Logs

设置完 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: $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

这篇文章对您有帮助吗?

我们可以改进什么?


需要更多帮助吗?