AWS SESメールボックスシミュレーターにて、カスタムヘッダや添付ファイル付きのテストEメールを送信する

背景

AWS SESでメール送信環境を構築したときは、合わせて メールが不達になったこと を検知する仕組みも構築します。 AWS SESから送信したメールでメール不達があまりにも多いと、AWS SESの利用が停止されるためです。

  さらに、AWS SESの本番運用を始める前に、メール不達を検知する仕組みの動作確認も大切です。

その動作確認で役立つのが Amazon SES メールボックスシミュレーター です (以降 シミュレーター と表記)。 シミュレーターを使用した Amazon SES でのテストメール送信 - Amazon Simple Email Service

シミュレーターには バウンス苦情 などのシナリオが用意されています。

このシナリオを使えば、AWS SES環境のバウンス率・苦情率に影響することなく、メール不達を検知する仕組みの動作確認ができます。

  さらに、シナリオとして用意されていないケース、例えば

  • カスタムメールヘッダ付きのメールを送信し、メールが不達になる

  • reject イベントが発生するメールを送信し、メールが不達になる

であっても、シミュレーターを使って動作確認ができます。

 

この記事では、シナリオとして用意されてないケースに対する、シミュレーターの使い方を記載します。

なお、不達を検知する仕組み 「AWS SESで発生したイベントの通知情報が AWS SES → AWS SNS → AWS SQS の順で流れていく環境」 は、すでに構築済であるとして、ここでは記載しません。

 

カスタムメールヘッダ付きのメールを送信し、メールが不達になるケース

まずはこのケースを試してみます。

今回は、「カスタムメールヘッダ X-My-Custom-Header を含むメールを送信したが、バウンスによりメールが不達になる」ケースをシミュレーターで試してみます。

まずはシミュレーターで以下の設定を行います。

  • Eメール形式欄では、 Raw を選択する

  • シナリオ欄では、 バウンス を選択する

  • メッセージ欄では、以下のようなMIMEメッセージを入力する

To: bounce@simulator.amazonses.com
Subject: バウンステスト
X-My-Custom-Header: hello
Content-Type: text/plain
MIME-Version: 1.0

hello

参考までに、設定した後のスクリーンショットは以下となります。

 

以上で準備ができました。

では、シミュレーターの テストEメールの送信 ボタンをクリックしてメールを送信してみましょう。

すると、このメールはバウンスし、AWS SQSへとイベント情報が連携されます。

AWS SQSのコンソールにて確認すると、以下のスクリーンショットのようなメッセージを受信できました。カスタムメールヘッダ X-My-Custom-Header が含まれています。

reject イベントが発生するメールを送信し、メールが不達になるケース

まず、「 reject (拒否)イベントとは何か」 から記載します。

rejectイベントについて、AWSドキュメントの記載は以下です。

拒否イベントのテスト

Amazon SES を介して送信するすべてのメッセージでウイルスがスキャンされます。ウイルスを含むメッセージを送信すると、Amazon SES はメッセージを受け入れ、ウイルスを検出して、そのメッセージ全体を拒否します。Amazon SES でメッセージが拒否されると、メッセージの処理が停止され、受取人のメールサーバーへのメッセージ配信は試行されません。次に、拒否イベントが生成されます。

 

https://docs.aws.amazon.com/ja_jp/ses/latest/dg/send-an-email-from-console.html#send-email-simulator

  ただ、「実際にウィルスを含むファイルを作成し、AWS SESでそのファイルを添付してメールを送信する」を試すのは色々問題があります。

その問題を避けるため、AWSドキュメントにあるように、AWS SESでは

拒否イベントは、欧州コンピューターウイルス対策研究所(EICAR)テストファイルを使用してテストできます

という方法で reject イベントの発生をテストできそうです。

 

しかし、シミュレーターではEICARの内容をそのまま添付することはできません。

以下のドキュメントにあるように、シミュレーターでファイルを添付したい場合、ファイルの中身の文字列を base64 エンコードして メッセージ 欄へ設定する必要があるためです。 MIME の使用 - Amazon SES API v2 を使用した raw E メールの送信 - Amazon Simple Email Service

  文字列をbase64エンコードするには、各プログラミング言語のライブラリを使うのが簡単です。

今回はRubyのirbを使って base64 エンコードします。

% irb
irb(main):001:0> require 'base64'
=> true
irb(main):002:0> Base64.strict_encode64('X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*')
=> "WDVPIVAlQEFQWzRcUFpYNTQoUF4pN0NDKTd9JEVJQ0FSLVNUQU5EQVJELUFOVElWSVJVUy1URVNULUZJTEUhJEgrSCo="

これでEICARテストファイルは添付できそうです。

  では、実際にシミュレーターで送信してみましょう。

今回は、「カスタムメールヘッダ X-My-Custom-Header があり、かつ、EICARファイルを添付した状態でメールを送信する」ケースをシミュレータで試してみます。

まずはシミュレーターで以下の設定を行います。

  • Eメール形式欄では、 Raw を選択する

  • シナリオ欄では、 カスタム を選択する

  • カスタム受信者欄では、任意の受信可能なメールアドレスを指定する

  • メッセージ欄では、カスタムメールヘッダと添付ファイルを含んだMIMEメッセージを入力する

  ここで、添付ファイルを含むMIMEメッセージをゼロから作るのは手間がかかります。

そこで、AWSドキュメントの MIMEの使用 | Amazon SES API v2 を使用した raw E メールの送信 - Amazon Simple Email Service をベースに

  • カスタムメールヘッダ X-My-Custom-Header を追加

  • 元々ある添付ファイルの値を、EICARテストファイルをbase64エンコードした値へと差し替え

という編集を加えて利用します。

具体的には、以下の内容をメッセージ欄へと入力します。

Subject: reject test
X-My-Custom-Header: hello
Content-Type: multipart/mixed;
    boundary="a3f166a86b56ff6c37755292d690675717ea3cd9de81228ec2b76ed4a15d6d1a"

--a3f166a86b56ff6c37755292d690675717ea3cd9de81228ec2b76ed4a15d6d1a
Content-Type: multipart/alternative;
    boundary="sub_a3f166a86b56ff6c37755292d690675717ea3cd9de81228ec2b76ed4a15d6d1a"

--sub_a3f166a86b56ff6c37755292d690675717ea3cd9de81228ec2b76ed4a15d6d1a
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: quoted-printable

Please see the attached file for a list of customers to contact.

--sub_a3f166a86b56ff6c37755292d690675717ea3cd9de81228ec2b76ed4a15d6d1a
Content-Type: text/html; charset=iso-8859-1
Content-Transfer-Encoding: quoted-printable

<html>
<head></head>
<body>
<h1>Hello!</h1>
</body>
</html>

--sub_a3f166a86b56ff6c37755292d690675717ea3cd9de81228ec2b76ed4a15d6d1a--

--a3f166a86b56ff6c37755292d690675717ea3cd9de81228ec2b76ed4a15d6d1a
Content-Type: text/plain; name="sample.txt"
Content-Description: sample.txt
Content-Disposition: attachment;filename="sample.txt";
    creation-date="Sat, 05 Aug 2017 19:35:36 GMT";
Content-Transfer-Encoding: base64

WDVPIVAlQEFQWzRcUFpYNTQoUF4pN0NDKTd9JEVJQ0FSLVNUQU5EQVJELUFOVElWSVJVUy1URVNULUZJTEUhJEgrSCo=

--a3f166a86b56ff6c37755292d690675717ea3cd9de81228ec2b76ed4a15d6d1a--

次に、シミュレーターの テストEメールの送信 ボタンをクリックしてメールを送信してみましょう。

すると、このメールの送信時にrejectイベントが発生し、AWS SQSへとイベント情報が連携されます。

AWS SQSのコンソールにて確認すると、以下のスクリーンショットのような

  • eventTypeが Reject

  • カスタムメールヘッダ X-My-Custom-Header が含まれる

というメッセージを受信できました。

  以上より、シミュレーターのシナリオとして用意されていないケースであっても、シミュレーターで試せると分かりました。

本サイトの更新情報は、Twitterの株式会社プレセナ・ストラテジック・パートナーズエンジニア公式アカウントで発信しています。ご確認ください。

 

最終更新