如何让 Python AWS Lambda 打开作为电子邮件对象存储在 S3 中的电子邮件

How to make a Python AWS Lambda open an email stored in S3 as email object

我意识到这是一个完全菜鸟的问题,希望有一个简单的解决方案。但是,我被卡住了并向您寻求帮助!我想要做的是:我有一个 SES 规则集,用于将电子邮件存储在我的 S3 存储桶中。我存储的特定电子邮件包含一个 .txt 附件。我希望有一个在 S3 存储桶 "Create" 函数上触发的 Lambda 函数,打开电子邮件和附件,然后根据电子邮件附件中的特定文本执行一些其他处理。

我的具体问题是:如何允许 Lambda 函数接收 S3 电子邮件 "object" 并将其转换为标准 Python "message" 对象格式,以便我可以针对它使用 Python 的电子邮件库?

这是我目前所拥有的……不多,我知道:

import boto3
import email

def lambda_handler(event, context):
s3 = boto3.client("s3")

if event: 

    print("My Event is : ", event)
    file_obj = event["Records"][0]
    filename = str(file_obj["s3"]['object']['key'])
    print("filename: ", filename)
    fileObj = s3.get_object(Bucket = "mytestbucket", Key=filename)
    print("file has been gotten!")

    #Now that the .eml file that was stored in S3 is stored in fileObj, 
    #start parsing it--but how to convert it to "email" class???
    #??????

你能试试这样的吗?这样,您将从使用 S3 文件打开的流中返回 msg 对象。

import boto3
import email

def lambda_handler(event, context):
s3 = boto3.client("s3")

if event: 

    print("My Event is : ", event)
    file_obj = event["Records"][0]
    filename = str(file_obj["s3"]['object']['key'])
    print("filename: ", filename)
    fileObj = s3.get_object(Bucket = "mytestbucket", Key=filename)
    print("file has been gotten!")
    msg = email.message_from_bytes(fileObj['Body'].read())
    print(msg['Subject'])
    #Hello