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

Dockerfile作成での気づきなど(php+webサーバー)

実務で、Dockerfileを色々いじっていたんのでそこで得た気づきなどを。 Contents1 基本的な構成の考え2 アプリに関して 基本的な構成の考え 以前はCentOSを入れてその中にphp、M …

no image

vagrantでサーバーの状態を保存(snapshot)

上司がAnsible(構成管理ツール)のサンプルをくれたのですが、試そうにもまっさらなサーバーを用意しないといけません。 サーバー環境を新規に契約するのは面倒なのでvagrantで当然考えています。 …

no image

chefのインストール

以前からずっと課題になっていたchefのインストールについてです。 まだ全然わかっていませんが、なんとかvagrantからのインストールをすることができましたのでメモします。 chefでの環境構築とい …

no image

SMTP-AUTHのメール送信

メールに関して以前にもこんなこと書きましたが、今更ながらトラブルが起きたのでしっかり理解しておかないと・・・ 基礎が弱いと困るのう・・・ ロリポップなどのサーバーでmb_send_mailを打てばよく …

no image

POP3を使ったメール受信

メールの送信と比べると、プログラムで描く頻度は少ないですが、メールの受信について。 Contents1 POP3サーバー2 プログラムにてPOP3サーバーと通信3 PHPにてメールを取得する場合 PO …