从电子邮件中提取并保存附件(通过SES)到AWS S3

时间:2017-06-06 12:04:34

标签: amazon-web-services amazon-s3 aws-lambda boto3

我想从电子邮件中提取附件并将​​其保存到我的新S3存储桶中。到目前为止,我已配置AWS Simple Email Service来拦截传入的电子邮件。现在我有一个AWS lambda python函数,它在S3 Put上被触发。

在此之前它正在发挥作用。但我的lambda提出错误说:" [Errno 2]没有这样的文件或目录:' abc.docx':OSError"。我看到在S3中的原始电子邮件中提到了名为abc.docx的附件。

我认为问题出在我的upload_file中。你能帮帮我吗?

请在下面找到我的代码的相关部分。

s3 = boto3.client('s3')
s3resource = boto3.resource('s3')


waiterFlg = s3.get_waiter('object_exists')
waiterFlg.wait(Bucket=bucket, Key=key)

response = s3resource.Bucket(bucket).Object(key)

message = email.message_from_string(response.get()["Body"].read())

    if len(message.get_payload()) == 2:

        attachment = msg.get_payload()[1]
        s3resource.meta.client.upload_file(attachment.get_filename(), outputBucket, attachment.get_filename())

    else:
        print("Could not see file/attachment.")

2 个答案:

答案 0 :(得分:3)

您可以将附件下载到Lambda中的/ tmp目录,然后上传到S3。

答案 1 :(得分:1)

以下代码解决了这个问题。

  

开( '/ TMP / newFile.docx',   的WB')。写(attachment.get_payload(解码= TRUE))               s3r.meta.client.upload_file('/ tmp / newFile.docx',outputBucket,attachment.get_filename())