Amazon Simple Email Service (Amazon SES) の ID で特定のドメインまたはメールアドレスからのメールを受信しないようにしたいです。
解決策
特定のドメインまたはメールアドレスをブロックして Amazon SES ID にメールが送信されないようにするには、次の手順を実行します。
-
Lambda コンソールを開きます。
注: Lambda 関数は、Amazon SES で使用するのと同じ AWS リージョンにある必要があります。
-
[関数の作成] を選択します。
-
[最初から作成] を選択します。
-
[関数名] に、関数の名前を入力します。(SESReceiptRule など。)
-
[ランタイム] で [Node.js 20.x] を選択します。
-
[デフォルトの実行ロールの変更] の [実行ロール] で [基本的な Lambda アクセス許可で新しいロールを作成する] を選択します。
-
[関数の作成] を選択します。
-
[コードソース] に次のコードを入力します。
// Copyright 2023 Amazon.com, Inc. or its affiliates. All Rights Reserved.
// SPDX-License-Identifier: MIT-0
'use strict';
export const handler = async (event) => {
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.
const blockingListString = process.env.blockingList;
const blockingListArray = blockingListString.replace(/\s/g, '').split(",");
// Check if the mail source matches with any of the email addresses or domains defined in the environment variable
const isListed = () => {
return blockingListArray.some(item => mail.source.endsWith(item));
};
console.log('Processing message:', messageId);
// Processing the message
if (isListed()) {
console.log('Rejecting messageId: ', messageId, ' - Source: ', mail.source, ' - Recipients: ', receipt.recipients, ' - Subject: ', mail.commonHeaders['subject']);
return { disposition: 'STOP_RULE_SET' };
} else {
console.log('Accepting messageId:', messageId, ' - Source: ', mail.source, ' - Recipients: ', receipt.recipients, ' - Subject: ', mail.commonHeaders['subject']);
return { disposition: 'CONTINUE' };
}
};
-
[環境変数] の [キー] に blockingList と入力します。
注: 環境変数の作成数に制限はありません。ただし、セットの合計サイズは 4 KB を超えることはできません。詳細については、「Lambda 環境変数を作成する」を参照してください。
-
blockingList 値には、ブロックするメールアドレスとドメインをカンマ区切りのリストで入力します。入力例: "example.com, JohnDoe@example.com"
注: メールアドレスとドメインのリストを編集するために Lambda 関数コードを変更する必要はありません。
-
[保存] を選択します。
Amazon SES 受信ルールを作成する
次の手順を実行します。
- Amazon SES コンソールを開きます。
- ナビゲーションペインで、[E メール受信] を選択します。
- [ルールセットの作成] を選択し、ルールセット名を入力した後、[ルールセットを作成] を選択します。または、既存のアクティブなルールセットを選択します。
注: 新しいルールセットを作成する場合は、ルールセットを選択し、[アクティブなルールセットとして設定] を選択します。
- [アクティブなルールセットを表示] を選択します。
- [ルールの作成] を選択します。
注: 既存のルールを更新することもできます。
- [ルール名] に、ルールの名前を入力します。次に、下記のフィールドに入力します。
[ステータス] で [有効] を選択します。
(オプション) Transport Layer Security (TLS) や、スパムとウイルスのスキャンを設定します。
- [次へ] を選択します。
- [受信者条件] で [新しい受信者条件を追加] を選択します。Amazon SES の ID に関連付けられているメールアドレスまたはドメインを入力します。
重要: メールを受信しないメールアドレスまたはドメインを入力します。ブロックするメールアドレスやドメインは入力しないでください。例えば、Amazon SES の ID で "JaneRoe@example.net" というメールアドレスを使用していて、"example.com" からのメールをブロックする場合は、"JaneRoe@example.net" と入力します。
- [次へ] を選択します。
- [アクションの追加] の [新しいアクションを追加] で、[AWS Lambda 関数を呼び出す] を選択します。次に、以下のフィールドに入力します。
[Lambda 関数] でお使いの関数を選択します。
呼び出しタイプに [RequestResponse の呼び出し] を選択します。
(オプション) SNS トピックを設定します。
- [次のステップ] を選択します。
- [ルールの作成] を選択します。
注: 「アクセス許可がありません」というダイアログボックスが表示され、「Lambda 関数にアクセスできません」というメッセージが記載されている場合は、Amazon SES に関数へのアクセス許可が必要です。[アクセス許可を追加] を選択して、必要なアクセス許可を設定します。
関数の CloudWatch Logs を確認する
メールがブロックされていることを確認するには、次の手順を実行します。
- Amazon CloudWatch コンソールを開きます。
- ナビゲーションペインで、[ログ] を選択します。
- ロググループのリストから、該当する Lambda 関数のロググループを選択します。たとえば、/aws/lambda/name_of_your_function を選択します。
- 確認するログストリームを選択します。ログストリームには、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
関連情報
Amazon SES でのメール受信の概念とユースケース
Lambda 関数アクションを呼び出す