Amazon SES, S3で受信したメールをAWS Lambda, SESで別のメールへ転送する
2021/07/04
Amazon SESでメール受信で受信したメールを、毎回S3バケットに見に行ってもいられないので、S3イベントでLambdaを呼び出してSES APIのraw Email送信をします。
普段使いのメールに転送する目的です。
送信者と転送先をすべてSES Email Address Identitiesで承認済にしました。
LambdaはS3のオブジェクト作成トリガーで設定しています。
コードはこうなりました。
送信者をSES Email Address Identitiesで承認済にしておかなければいけないので、FromとReturn-Pathのメールアドレスを置換しました。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
import boto3 import email import re import logging import os forward_to = os.environ.get('FORWARD_TO', '') forward_from = os.environ.get('FORWARD_FROM', '') log_level = os.environ.get('LOG_LEVEL', 'INFO') logger = logging.getLogger() def logger_level(level): if level == 'CRITICAL': return 50 elif level == 'ERROR': return 40 elif level == 'WARNING': return 30 elif level == 'INFO': return 20 elif level == 'DEBUG': return 10 else: return 0 logger.setLevel(logger_level(log_level)) def lambda_handler(event, context): try: s3 = boto3.client('s3') bucket = event['Records'][0]['s3']['bucket']['name'] key = event['Records'][0]['s3']['object']['key'] response = s3.get_object( Bucket=bucket, Key=key ) message = response['Body'].read().decode('utf-8') logger.debug(message) message = re.sub("\nFrom: .+?\n", "\nFrom: %s\n" % forward_from, message, 1) message = re.sub("^Return-Path: .+?\n", "Return-Path: %s\n" % forward_from, message, 1) logger.info(message) ses = boto3.client('ses') response = ses.send_raw_email( Source=forward_from, Destinations=forward_to.split(','), RawMessage={ 'Data': message } ) logger.info(response) except Exception as e: logger.error(e) |
Lambdaの環境変数のFORWARD_TOにはSES Email Address Identitiesで承認済のメールアドレスをカンマ区切りで設定しています。
IAMロールのポリシーはこうなりました。
sesのidentityは宛先なので増える可能性もあって*にしています。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetObject", "ses:SendRawEmail" ], "Resource": [ "arn:aws:ses:us-east-1:123456789012:identity/*", "arn:aws:s3:::bucketname/*" ] } ] } |
最後までお読みいただきましてありがとうございました!
「AWS認定資格試験テキスト&問題集 AWS認定ソリューションアーキテクト - プロフェッショナル 改訂第2版」という本を書きました。
「AWS認定資格試験テキスト AWS認定クラウドプラクティショナー 改訂第3版」という本を書きました。
「AWS認定資格試験テキスト AWS認定AIプラクティショナー」という本を書きました。
「AWS教科書 AWS認定デベロッパーアソシエイト テキスト&問題集 」という本を書きました。
「要点整理から攻略するAWS認定ソリューションアーキテクト-アソシエイト」という本を書きました。
「AWSではじめるLinux入門ガイド」という本を書きました。
開発ベンダー5年、ユーザ企業システム部門通算9年、ITインストラクター5年目でプロトタイプビルダーもやりだしたSoftware Engineerです。
質問はコメントかSNSなどからお気軽にどうぞ。
出来る限りなるべく答えます。
このブログの内容/発言の一切は個人の見解であり、所属する組織とは関係ありません。
このブログは経験したことなどの共有を目的としており、手順や結果などを保証するものではありません。
ご参考にされる際は、読者様自身のご判断にてご対応をお願いいたします。
また、勉強会やイベントのレポートは自分が気になったことをメモしたり、聞いて思ったことを書いていますので、登壇者の意見や発表内容ではありません。
関連記事
-
-
5分でAlexaスキルを作る
「JAWS-UG Osaka 第22回勉強会 東西の中の人が語る!!! Micr …
-
-
ブラウザからJavaScript SDKを使ってAmazon S3 への写真のアップロードチュートリアルをやってみました
ブラウザから Amazon S3 への写真のアップロードをやってみました。 HT …
-
-
EC2のAMIとRDSのスナップショットを他のAWSアカウントに共有してブログサイトをAWSアカウント間で引っ越す
当ブログで使用しているEC2とRDSを環境の整理のため、他のAWSアカウントへ引 …
-
-
AWS Organizationsからメンバーアカウントを直接「閉じる」ことができるようになりました
これまでは、メンバーアカウントはOrganizations組織から「除外」して独 …
-
-
ヤマムギvol.27 Amazon Route 53プライベートホストゾーンとリゾルバーのデモをしました
今日は『AWS認定資格試験テキスト&問題集AWS認定ソリューションアーキ …
-
-
AWSのAmazon LinuxにGitマスターサーバをインストールしてRedmineリポジトリブラウザで見る
Amazon LinuxにGitをインストールする Gitをインストールして自動 …
-
-
AWS Organizationsで新規メンバー登録したアカウントを組織から離して解約
2021年現在ではこの方法しかないと認識していますので書き残します。 そのうち新 …
-
-
AWS Lambda(Python3.7)でPandocを実行する
昨日まで(AWS Batch) 昨日までは、Pandocを実行して、S3バケット …
-
-
AWS Lambda(Python)からAmazon Connectで電話を発信する
自動で電話を発信する必要がありまして、電話発信APIを開発することになりましたの …
-
-
AWS Lambda(Python)からZoom投票作成
以前、Zoomの投票(アンケート)をAPI経由で作成するというブログで書きました …


