AWS SES目前仍然支持通过API Gateway和Lambda函数接收邮件。以下是一个Lambda函数示例,可以将收到的邮件转发到另一个邮件地址并将其存储在S3存储桶中。
import boto3
import email
import os
def lambda_handler(event, context):
s3 = boto3.client('s3')
ses = boto3.client('ses')
# 如果事件为S3 PUT操作,则尝试将邮件转发到指定邮箱。
if event['Records'][0]['eventSource'] == 'aws:s3':
bucket_name = event['Records'][0]['s3']['bucket']['name']
object_key = event['Records'][0]['s3']['object']['key']
object = s3.get_object(Bucket=bucket_name, Key=object_key)
email_raw = object['Body'].read().decode('utf-8')
email_msg = email.message_from_string(email_raw)
source_email = os.environ['SOURCE_EMAIL']
destination_email = os.environ['DESTINATION_EMAIL']
response = ses.send_raw_email(
Destinations=[
destination_email
],
RawMessage={
'Data': email_raw
},
Source=source_email
)
# 将邮件存储到指定的S3存储桶中。
s3_target_bucket = os.environ['S3_TARGET_BUCKET']
s3_target_prefix = os.environ['S3_TARGET_PREFIX']
s3.put_object(Bucket=s3_target_bucket,
Key='{}/{}'.format(s3_target_prefix, object_key),
Body=email_raw.encode())