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

Python環境構築に関して(主にpipに関して)

Pythonの環境構築で扱うpipに関して、ちょっと勉強したことなどをまとめます。 Pythonのパッケージ管理システムでredhatのyumやRubyのGemのようなものです。 Python3.4以 …

no image

PHPMailerに関して(PHPのメール送信)

PHPのMailライブラリに関して。 今までmb_send_mailとかで誤魔化してましたが、以下のようにライブラリで送るケースのサンプル。 https://github.com/umanari145 …

no image

Python+cgiでwebアプリを動かすまで

PythonでRESTAPI的なプログラムを作った時のメモ。 あまりCGIで実行する人がいないようで、情報がそこまでありませんでしたが、Perlでやった経験もあり、動かせました。 Contents1 …

no image

メールを受信してプログラムを起動させる

今年の初めごろにやったプログラムです。 かなり汎用的なのと、使えそうなのでメモしときます。 題の通り、メールを受信して、それをトリガーにしてなんらかのプログラムを起動させます。 ここではPHPで、ある …

no image

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

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

アーカイブ