AWS SESのメール転送をLambdaを使って実現するサンプルソースコード
今回はAmazon SESのメール転送をLambdaを使って実現するためのサンプルソースコードについてご紹介いたします。
AWS SESのメール転送をLambdaを使って実現するサンプルソースコード
AWSのSESのメール転送をネットに落ちている情報を利用してPythonを使って組みました。
Lambdaの構成は次の通りです。
S3の特定のバケットに情報が入ったのをトリガーとして、Lambdaを起動するようにしております。
Lamdbaのセキュリティグループに、S3の全権やSESの全権を設定しなければならず、そこが結構ハマる箇所でした。
モニタリングのCloudWatchを見ながら試行錯誤を繰り返しました。
AWS SESのメール転送をLambdaを使って実現するためのソースコードはこちらです。
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 57 58 59 |
# import json # def lambda_handler(event, context): # # TODO implement # return { # 'statusCode': 200, # 'body': json.dumps('Hello from Lambda!') # } import boto3 import email import re ORIGIN_TO = "送信元のメールアドレス" FORWARD_TO = "送信先のメールアドレス" SES_REGION = "SESが設定されているリージョン" S3_BUCKET = "SESのメールが保存されるS3のバケット名" def parse_mail(raw_message): replaced_message = raw_message.replace(ORIGIN_TO, FORWARD_TO) replaced_message = re.sub("From:.+?\n", "From: %s\r\n" % ORIGIN_TO, replaced_message) replaced_message = re.sub("Return-Path:.+?\n", "Return-Path: %s\r\n" % ORIGIN_TO, replaced_message) return replaced_message def send_mail(message): ses = boto3.client('ses', region_name=SES_REGION) ses.send_raw_email( Source = FORWARD_TO, Destinations=[ FORWARD_TO ], RawMessage={ 'Data': message } ) def lambda_handler(event, context): try: s3_key = event['Records'][0]['s3']['object']['key'] s3 = boto3.client('s3') print('## GET EVENT') response = s3.get_object( Bucket = S3_BUCKET, Key = s3_key ) raw_message = response['Body'].read() message = parse_mail(raw_message) print(message) send_mail(message) except Exception as e: print(e) |
print文を挟んでデバッグしながら行いました。
ソースコードを書く以外にも色々セッティングしなければならない箇所があり、単純にソースコードをコピペするだけではうまくいかなかったりします。
作りながら知りましたが、実際のシステムではSESのメール転送をLambdaで使うことは推奨されていないそうです。
他のメールサービスを使った方が良いらしいですね。
終わりに
今回はAmazon SESのメール転送をLambdaを使って実現するためのサンプルソースコードについてご紹介いたしました。
ディスカッション
コメント一覧
まだ、コメントがありません