AWS SESからS3へ受信してからのメール転送
東京オリンピックでの選手の活躍すごかったですね。(まだ開催されてないときに書いてます。)
マエダです。
みんな大好きAWSでメール受信はしたりしますよね。
https://aws.amazon.com/jp/premiumsupport/knowledge-center/ses-receive-inbound-emails/
S3にメールファイルが保存されたことをトリガーにpythonでメール転送する君を作成しました。
過去にどこからか(覚えておらず。。すみません。)参照させていただいたコードがpython2.7で動作するものだったのですが「AWS Lambda end of support for Python 2.7」なんてお知らせいただいたのでpython3.8で動作するように修正してみました。
import boto3
import email
import re
ORIGIN_TO = "(受信メールアドレス)"
FORWARD_TO = "(転送先メールアドレス)"
SES_REGION = "(SESリージョン)"
S3_BUCKET = "(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 = ORIGIN_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')
response = s3.get_object(
Bucket = S3_BUCKET,
Key = s3_key
)
raw_message = response['Body'].read().decode('utf-8')
message = parse_mail(raw_message)
send_mail(message)
except Exception as e:
print(e)
AWSをたのしもう。