我想从电子邮件中提取附件并将其保存到我的新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.")
答案 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())