如何在 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 控制台。选择您用于 AWS SES 的 AWS 区域。Lambda 函数必须位于您使用 Amazon SES 的 AWS 区域。有关更多信息,请参阅调用 Lambda 函数操作

2.    选择创建函数

  1. 选择从头开始创建

4.    在函数名称处,输入您的函数名称。例如,输入“SESReceiptRule”。

  1. 运行时系统处,为您的函数选择一种语言。在本示例中选择了 Node.js 14.x

  2. 架构处,为函数代码选择架构。

  3. 权限下,展开更改默认执行角色

  4. 执行角色处,选择创建具有基本 Lambda 权限的新角色

9.    选择创建函数

  1. 代码源部分的 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();
    }
};
  1. 环境变量下密钥处,输入“blockingList”。
    **注意:**您可以创建的环境变量的数量没有限制。该集合的总大小不能超过 4 KB。有关更多信息,请参阅使用 AWS Lambda 环境变量

  2. 在“blockingList”的处,输入要阻止的电子邮件地址和域名的逗号分隔列表。例如,输入“example.com, JohnDoe@example.com”。
    **注意:**您无需更改 Lambda 函数代码即可编辑电子邮件地址和域名列表。

  3. 选择文件,然后选择保存

创建 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 函数,请选择您创建的函数。
    调用类型处,选择请求响应调用
    (可选)根据您的用例要求配置 SNS 主题。或者,也可以将此字段留空。有关此字段的更多信息,请参阅调用 Lambda 函数操作。然后,选择下一步
  10. 选择创建规则
    注意:您可能会看到一个缺少权限对话框,上面显示消息“SES was unable to access the resource [your Lambda function].” 此错误意味着 Amazon SES 需要该功能的权限。选择添加权限以配置所需的权限。

查看该函数的 CloudWatch Logs

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

  1. 打开 CloudWatch 控制台

2.    在导航窗格中的日志下,选择日志组

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

  2. 日志流下,选择要检查的日志流。日志流显示 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 官方已更新 8 个月前