如何解决在 AWS lambda 函数中使用 SES 发送 xlsx 文件
情况
我创建了一个 lambda 函数,它的输出是一个保存到 S3 存储桶的 Excel 文件。这部分功能按预期工作。 作为功能操作的一部分,我还希望能够将生成的 Excel 文件通过电子邮件发送给选定的收件人。
代码:
#IMPORT MODULES
import boto3
import pandas as pd
import io
from io import BytesIO
from io import StringIO
from datetime import date
import email
import email.header
import email.policy
from email.mime.text import MIMEText
from email.mime.application import MIMEApplication
from email.mime.multipart import MIMEMultipart
def lambda_handler(event,context):
# GENERATE CURRENT DATE TO APPEND TO FILE
today = date.today()
date_val = today.strftime("%B %d,%Y")
# CREATE DATAFRAME
df = pd.DataFrame({'Data': [10,22,31,43,57,99,65,74,88]})
# EVALUATE VARIABLES AS ODD OR EVEN INTEGERS
even = df.loc[df['Data']%2 == 0]
odd = df.loc[df['Data']%2 != 0]
# SPECIFY BUKCET NAME AND OUTPUT FILE PATH
bucket = 'my-bucket'
filepath = 'output/My_Excel_File_{}.xlsx'.format(date_val)
# EXPORT MULTI-SHEET EXCEL FILE AND SEND TO S3 BUCKET
with io.BytesIO() as output:
with pd.ExcelWriter(output,engine='xlsxwriter') as writer:
even.to_excel(writer,sheet_name = 'Even')
odd.to_excel(writer,sheet_name = 'Odd')
data = output.getvalue()
s3 = boto3.resource('s3')
s3.Bucket(bucket).put_object(Key=filepath,Body=data)
我尝试了什么
我试图通过参考各种文档将以下代码附加到我的函数中来实现我的目标,但这并没有达到预期的结果。
# EXPORT MULTI-SHEET EXCEL FILE AND SEND TO S3 BUCKET
message = MIMEMultipart()
message['Subject'] = 'Email subject'
message['From'] = 'sender.email@domain.com'
message['To'] = 'recipient.email@domain.com')
# MESSAGE BODY
part = MIMEText('Thus is the email body string','html')
message.attach(part)
# ATTACHEMENT
if attachment_string: # if bytestring available
part = MIMEApplication(str.encode('attachment_string'))
else: # if file provided
part = MIMEApplication(s3.get_object(Bucket='my-bucket',Key=My_Excel_File_{}.xlsx'.format(date_val)).read())
part.add_header('Content-disposition','attachment',filename='My_Excel_File_{}.xlsx'.format(date_val)')
message.attach(part)
response = client.send_raw_email(
Source=message['From'],Destinations=['recipient.email@domain.com'],RawMessage={
'Data': message.as_string()
}
)
解决方法
有一些 AWS 示例可以动态创建 excel 文档并通过电子邮件发送它们。在这个用例中,它们是用 Java 实现的,应用程序是一个 Web 应用程序。看到这个:
Creating the DynamoDB web application item tracker
虽然此示例使用适用于 Java V2 的 AWS 开发工具包,但它会给您一个想法,并希望您可以移植到您正在使用的编程语言。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。