【问题标题】:Extract and save attachment from email (via SES) into AWS S3从电子邮件中提取附件(通过 SES)并将其保存到 AWS S3
【发布时间】:2017-11-07 10:38:33
【问题描述】:

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

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

我认为问题出在我的上传文件中。你能帮我看看吗?

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

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.")

【问题讨论】:

  • 您可以尝试将附件下载到 Lambda 中的 /tmp 目录,然后上传到 S3。
  • 事实上我正在尝试,现在它似乎工作了。非常感谢您的帮助。以下代码有助于解决问题。open('/tmp/newFile.docx', 'wb').write(attachment.get_payload(decode=True)) s3r.meta.client.upload_file('/tmp/newFile.docx ', outputBucket, attachment.get_filename())

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


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    open('/tmp/newFile.docx', 'wb').write(attachment.get_payload(decode=True)) s3r.meta.client.upload_file('/tmp/newFile.docx', outputBucket, attachment.get_filename())

    【讨论】:

      猜你喜欢
      • 2016-11-17
      • 1970-01-01
      • 1970-01-01
      • 2019-08-24
      • 2016-11-17
      • 2023-02-01
      • 2016-04-15
      • 2020-11-25
      • 2016-01-19
      相关资源
      最近更新 更多