3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Amazon SES で無限ループを作った話

3
Posted at

はじめに

Amazon SESを使って、Eメールメッセージを加工する処理を作った。
構築自体はかなり簡単にできるので、正直なめていた。(反省はしていない)
SESを使うときは、メールの世界のルールを守らないといけない様子

構築

メールの流れ

こういう感じの事がやりたい
image.png

① SESでのドメイン検証:受信をするためにドメイン所有者から許可を受けている事を証明する
② SES受信ルール設定:メールが到着したときの動作を決める(今回の場合Lambdaを起動)
③ Lambda関数内から、SESからメール送信する


ここまではドメインやLambdaの知識があれば、比較的簡単にできる。(構築方法は別途)
受信するメールアドレス送信するメールアドレス を同じにしておいた(フラグ注意。下記参照)

メール送信のモニタリングを実装

バウンスが多いと、AWSから「スパムメール発行業者」と認定されるらしい。まぁそりゃそうだ。
こんなに手軽にメールサーバを作れるのに、悪用されたらたまったもんじゃない。

公式サイト等の手順を見ながら、メール送信後、バウンスを検知したらアラートを飛ばすようにしてみる。
通知を使用した Amazon SES E メール送信のモニタリング
image.png

項目 設定値
Email Feedback Forwarding: Enabled
Bounce Notifications SNS Topic: EmailサブスクリプションつけたSNSトピックARN

とりあえずこれで。👇こんなイメージになるんだなと。

image.png

テスト用のメールアドレスも準備されている。
Amazon SES での E メール送信のテスト

事件

Lambdaからのメール送信先を、テスト用バウンスアドレス"bounce@simulator.amazonses.com"にして実行。。
実行後すぐに、SNSで指定したメールアドレス宛に通知メールが届いた。
・・・止まらない。
image.png
200件超えたあたりで、SES > Domains > Notifications の SNSTopicを削除して、ようやく止まる。。

無限ループ?!
Lambdaのログ見てみよう
あああ
(フラグ回収)

解説

メール送信した後、SESに対して、”バウンス”・”苦情”・”到着”等のレスポンスが返るらしい。
バウンスを受け取ったとき、SNS経由で別なメールアドレスに通知するようにした。
FeedbackもONにしていた。→ 送信元にも通知するという事だろう。
今回、受信メールアドレスと送信メールアドレスを同じものにしていた。。つまり

SESがメールを受信→Lambda起動してSESでメール送信(テスト用バウンスアドレス)→バウンスがSESに通知される
→SESからSNS経由で、通知される
Feedbackにより、メール送信元に通知される(メール送信元=SES受信用メールアドレス) 👈こいつが無限ループ

解決策

・ 受信・送信のアドレスは分けないといけない(これは当たり前レベルの話orz)
・ Feedback を Disableにする(SNS通知のみにする。いや…無限ループを避けるためにする設定ではない。。)
E メールのフィードバック転送先 ←こちらを参考とする
image.png

まとめ

メールサーバをミドルウェアで構築していた時により、運用上検討すべき箇所がまとまってきた感。

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?