AWS SESでメールを受信してGmailに転送する
結構前ではあるがAWS SESでメール受信ができるようになったので、お試しがてら独自ドメインのメールをGmailに転送するようにした。
SES自体は東京リージョンにも対応しているがメール受信機能は無効化されていたので、バージニア北部(us-east-1)で設定を行った。
メール本文をs3に保存して、Lambdaでs3から本文を読み出してGmailに転送するようにしている。
Lambdaのコードは下記記事を参考にさせていただいた。
import os
import boto3
import logging
import json
import re
from email import message_from_string
s3_client = boto3.client('s3')
ses_client = boto3.client('ses')
logger = logging.getLogger()
logger.setLevel(logging.INFO)
s3_bucket = os.environ['S3_BUCKET']
s3_path_prefix = os.environ['S3_PATH_PREFIX']
forward_to = os.environ['FORWARD_TO']
domain_prefix = os.environ['DOMAIN_PREFIX']
def send_mail(message):
regexStr = r'(\w+@%s).*' % domain_prefix.replace('.', '\.')
matchobj = re.search(regexStr, message['To'])
from_address = matchobj.group(1)
return ses_client.send_raw_email(
Source = from_address,
Destinations = [
forward_to
],
RawMessage = {
'Data': message.as_string()
}
)
def lambda_handler(event, context):
message_id = event['Records'][0]['ses']['mail']['messageId']
s3_key = s3_path_prefix + message_id
response = s3_client.get_object(
Bucket = s3_bucket,
Key = s3_key
)
raw_message = response['Body'].read().decode('utf-8')
message = message_from_string(raw_message)
del message['DKIM-Signature']
del message['Sender']
del message['Return-Path']
original_from = message['From']
del message['From']
if not message['Reply-To']: message['Reply-To'] = original_from
message['Return-Path'] = forward_to
res = send_mail(message)
logger.info(json.dumps(res))
環境変数で↓を設定
name | 内容 |
---|---|
DOMAIN_PREFIX | 転送元メールのtoに指定されているドメイン(Verifyを行った独自ドメイン) |
FORWARD_TO | 転送先Gmailアドレス |
S3_BUCKET | SES受信時のActionに設定したS3バケット名 |
S3_PATH_PREFIX | SES受信時のActionに設定したS3設定のObject key prefix |
これで独自ドメイン宛のメールがGmailに転送されるようになった。
ついでに下記記事を参考にさせていただき、Gmailから独自ドメインメールアドレスとして送信もできるようにしておいた。
これでSESを使って独自ドメインメールの送受信ができるようになった。
独自ドメインのメール設定をSESに統一したかったので今回の対応を行ったが、「とりあえず手軽に独自ドメインメールの送受信がしたい」という場合はMailgunの方が楽。