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 ネットワーク状況1.1 ping1.2 traceroute ネットワーク状況 ping ネットワークの通信が正常かどうかをみる最も一般的なコマ …

no image

nginxの設定&php-fpmインストール

本日、久しぶりにPHPのWebアプリを別サーバーに移行したのですが、nginxの設定でかなり手間取りましたのでちょっと記録しておきます。 Contents1 nginxの設定1.1 インストール1.2 …

no image

Linuxコマンドでのテキスト整形 CSV系の処理など

以前、対テキストファイル系のLinuxコマンドの使い方を紹介しましたが、その関連エントリーを。 今回やるのはCSV系の処理ですね。 id name age 1  suzuki 35 2  tanaka …

no image

PHPのコマンドライン+隠しファイルも含めたcpコマンド

超小ネタを2つほど phpにrオプションを入れるとPHPコードを実行できます。

cp コマンドですが、隠しファイルも含めてコピーしたい …

no image

herokuでMySQL

昨日に続き、heroku+MySQLのメモです。 herokuはディフォルトではPostgreSQLですが、アドオンを使うとMySQLも使えるようになります。 使い方ですが、herokuの管理画面でク …