skillup

技術ブログ

Python サーバー・ネットワーク

Amazon SESでの受信→S3→Lambdaでのメール転送

投稿日:2019年6月15日 更新日:

SESでのメール受信についてエントリーを書いたのですが、実際にLambdaで転送して別のメールアドレスで受け取るまで。

Amazon SESについて(Route53登録→SESで受信→S3で保存)

えーSESでメール受信を行っても、そのメール自体を直接メールクライアントなどで見ることはできないようです。

メール自体中身が通常のメールクライアントで見れなければ意味はありません。

ということで、方法として調べたところ下記の方法があるようです。

  1. AmazonWorkMailを使う
  2. Lambdaで他のメールに転送(例えばgmailなど)

Amazon WorkMailとは

どうやらAWSアカウントで使えるようなgmailのようなサービスのようです。

これを使えば、一般のブラウザでメールが確認できますので、おそらく一番簡単ではないかと思います。

5分でできるWorkmail設定

お金がかかるようですが・・・

説明しているサイトを見ると本当にgmailのような感じですね。手軽さで言えばこちらの方が良いかと思います。

Lambdaで他のメールに転送(例えばgmailなど)

結局、技術的に調査したいこともあり、今回はこちらを使いました。

Lambdaとは

サーバーを立ち上げずに、コードを実行したりすることができるサービスのようです。

すぐに思いつくのは

  • 定期バッチ
  • 何らかのイベントをトリガーにしてのアクション

などです。

サーバーを立ち上げずにできる・・というのはすごいですよね。

以前、職場のリーダー的な方から話を聞きましたが、その時は?状態でした。

今回実際に自分が使うことになり、色々検索してみるとクラウド上にアプリケーションを構築する手法としてサーバーレスというのが徐々に認知されているようですね・・

今回行ったケースは

SESでのメール受信→Rule SetでS3への保存とLambdaのある関数(メール送信)をactionに設定→Lambdaでメール送信

というパターンです。

これだけの設定ですが、色々大変でした・・

lambdaでの関数登録

まずはlambdaにてメールを送信する関数を登録しなければいけません。

旬の技術なので色々と参考リンクがあるのはありがたいですが・・・

5分でわかる!AWS Lambda の使い方

今度こそ理解する!俺式Lambda入門

今回のケース(SESをトリガーにしての転送)ですと、

  • トリガー自体は必要なし(SESのRule Setで登録)
  • アクセス許可のリソースには、Cloud Watch Logs、AWS Lambdaを追加

になります。

Cloud Watch Logsは必須ではないかもしれませんが、デバッグしたり、ログをみることができるのであった方が絶対いいでしょう。

実際の関数作成

実際のプログラムの登録ですが、オンラインでブラウザで登録できるエディタ環境があり、これに登録をします。(今回はしませんが、実際にコードを書いて、zipであげたりとかなどもできるようです。)

すごく嬉しいことに簡単にテストができます。

下記のようなコードで実際に送信をすることができました。

PHPもあるようですが、なにやらディフォルトではダメなようなのでPythonを選択。

コード自体は下記URLのほぼコピペです(汗)

参考リンク

Amazon SESで受信したメールを転送したい

SESで受信したメールをLambdaを通して転送&S3に保存 – Lambda(Python)/S3/SES

少しハマった点や解決のポイントになりそうなところなど

  • eventという変数をprintするとcloud watch logsにデータがはかれる→一度メールをSESに送り、print(event)する→そのjsonデータをテストデータとして登録し、テスト実行&デバッグすると開発がすごく簡単
  • policyで引っかかるのでs3,ses共にpolicyの追加が必須。(関数単位のpolicyではなくロール単位でのpolicyを)。S3はアクセス権限→バケットポリシーから。SESはDomainsからIdentity Policiesから。
  • Pythonはこれ以外にもs3などのファイル群を簡単に操作できるライブラリが多数あるようで、AWSとの親和性は高いかも。

色々格闘しまして、無事、メール転送までをすることができました。長かった・・・

-Python, サーバー・ネットワーク
-

執筆者:


  1. […] 実際にメールを転送して一般のメールクライアントでみる方法はこちら Amazon SESでの受信→S3→Lambdaでのメール転送 […]

  2. […] Amazon SESでの受信→S3→Lambdaでのメール転送 […]

comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

no image

メモリー不足でのスワップ割り当て

先日、あるサーバーでcomposerをinstallしようとしたところ、 The following exception is caused by a lack of memory or swap, …

no image

システム監視の基礎

システム監視のルールがほとんどないので、ちょっと勉強中です。 Contents1 危険率の判定2 参考文献 危険率の判定 今まで一番知りたかったことがこれなんですね。例えばシステムに負荷がかかっている …

no image

SQLインジェクション

セキュリティ関係の知識がぬるいのでちょっとお勉強。 知っていることもあるが復習もかねて勉強を。 Contents1 SQLインジェクションとは?2 被害3 対策4 参考サイト・書籍5 ソース SQLイ …

no image

Vagarant+Eclipse(Perl)での作業環境構築

現在の案件でPerlの改修があるんですが、windowsだとモジュールの依存関係でうまくコンパイルできなかったりといろいろとトラブルが起こったんで、今はやりの仮想環境でやることに。 まだ完ぺきではない …

no image

vagrant share

実はvagrantを使って仮想環境を一時的ではありますが、webから見ることができます。 1 まずはhttps://atlas.hashicorp.com/account/newにてアカウント登録。そ …