当前位置: 首页 > 知识库问答 >
问题:

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

哈骞仕
2023-03-14

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

直到这是工作。但是我的lambda给错误说:[错误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个答案

任长卿
2023-03-14

下面的代码解决了这个问题。

打开('/tmp/newFile.docx',wb')。写入(附件.get_有效载荷(decode=True))s3r。元。客户上传文件('/tmp/newFile.docx',outputBucket,attachment.get_filename())

谈禄
2023-03-14

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

 类似资料:
  • 我有一个crontab,其中包括一个MAILTO=my.email@example.com。我的服务器使用msmtp将电子邮件转发到Amazon Simple Email Service。我的问题是cron命令的输出永远不会到达我的邮箱。这就是msmtp日志所说的: Mar06 14:26:02host=email-smtp.us-east-1.amazonaws.comtls=on auth=o

  • 是否可以在Gmail邮箱中搜索特定的标签/和或主题,并从电子邮件正文中提取电子邮件地址,然后保存到电子表格中? 电子邮件正文示例: 非常感谢,罗德

  • 我已经证实了以下几点 AWS SES不在沙箱中。我可以通过控制台发送电子邮件到未经验证的电子邮件标识。 我的Lambda函数有一个角色附加了对SES和Lambda的完全访问权限(因为它最初的基本测试给了完全的权限) 下面是AWS文档中的基本代码,只是硬编码了我的电子邮件id。但我无法收到任何电子邮件。lambda代码运行成功,但我没有收到电子邮件。 附加我的云监视日志以供参考

  • 我使用AWS SES服务发送电子邮件与验证的测试电子邮件地址在SES和使用相同的来源。 我正试图将电子邮件发送到其他电子邮件地址,但无法发送。这是给我的错误“电子邮件地址未经验证。以下身份未通过在US-EAST-1地区的检查”。 发送电子邮件的代码参考:https://aws.amazon.com/premiumsupport/knowledge-center/lambda-send-email-

  • 问题内容: 我在AWS Lambda上创建了一个非常基本的简单函数,该函数将用于接受表单提交。 该功能的一部分将是向特定的人发送电子邮件,非常简单。我正在尝试使用AWS SES来执行此操作。我已经设置了SES服务等,并验证了我希望发送到的帐户并能够发送测试电子邮件。所有作品!! 现在,当我尝试在AWS Lambda中执行相同操作并使用aws sdk时,它不会发送电子邮件。我没有收到任何错误。 以下

  • 我正在使用Azure mobile services后端,我可以通过SendGrid成功地发送电子邮件。但是,每次我尝试添加附件时,它都失败了。我从来没有收到过邮件。经过一点研究,我发现我所需要的只是一个虚拟路径。我修改了路径名,但它仍然不工作。 我想不出为什么会失败。 下面是我的代码: