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

メールの文字化け対策

メールの文字コードに関して、色々ごまかしながらやってましたが真面目に取り組む必要があり、ここでメモ。 Contents1 前提条件2 ヘッダー部分3 メール本文3.1 Content-Transfer …

no image

python基礎 1時間で文字出力、配列、ループ、ハッシュ、メソッド、クラスを学習。

pythonの基礎的な文法に関してメモります。 ぶっちゃけ下記リンクの方がまとまっているのでこれ見とけばOKです。 Python基礎まとめ 一応、自分が書いたコードに関して下にメモります。 基礎に関し …

no image

DNSの仕組み

本日はDNSについて。 とりあえず要点のみ DNSのざっくりとした仕組み ネットワーク上での住所を決める仕組み。 本来はIPがその役割を果たしている. [crayon-617865bbb3768240 …

no image

障害調査フロー

実務でサーバーの障害が発生した時のフローなどをメモしおこうかと。 行ってしまうと「ログに始まり、ログにおわる」といった感じでしょうか。 サーバーエンジニアの方の作業をみてたんですが、基本的にはプログラ …

no image

Dockerfileでのコンテナ作成

dockerは通常はimageを取得し、コンテナを起動した後、自分独自にライブラリなどをインストールし、出来たものをcommitしますが、Dockerfileをつかえばこの一連の操作をファイルに記録し …