2017-06-06 105 views
1

我想從電子郵件中提取附件並將​​其保存到我的新S3存儲桶中。到目前爲止,我已經配置了AWS Simple Email Service來攔截傳入的電子郵件。現在我有一個AWS lambda python函數,它在S3 Put上觸發。通過電子郵件(通過SES)提取並保存附件到AWS S3

直到它工作。但是我的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

您可以嘗試將附件下載到Lambda中的/ tmp目錄,然後上載到S3。 – Ashan

+0

事實上,我正在嘗試,現在似乎工作。非常感謝您的幫助。下面的代碼幫助解決了這個問題。('/ tmp/newFile.docx','wb')。write(attachment.get_payload(decode = True)) s3r.meta.client.upload_file('/ tmp/newFile。 docx',outputBucket,attachment.get_filename()) – user3567195

回答

0

以下代碼解決了該問題。

打開( '/ TMP/newFile.docx', 'WB')。寫(attachment.get_payload(解碼= TRUE)) s3r.meta.client.upload_file('/ TMP/newFile.docx ',outputBucket,attachment.get_filename())

2

您可以將附件下載到Lambda中的/ tmp目錄,然後上載到S3。