使用xlwt创建文件并在Django应用程序中发送电子邮件

cgvd09ve  于 2023-08-08  发布在  Go
关注(0)|答案(2)|浏览(74)

我已经用xlwt创建了一个工作簿,现在我想知道我是否可以使用这个工作簿发送电子邮件,但不将工作簿保存在磁盘上。我无法做一个适当的实现,我可以发送它作为一个附件,而不保存在磁盘上暂时。下面是电子邮件作为附件的代码。

file_name = "temp_file_location.xlsx"
book = xlwt.Workbook()
sheet = book.add_sheet("XYZ")
book.save(file_name)

message = EmailMessage(subject="Subject", body="body",
             from_email="random@gmail.com", 
             to=email_list)
message.attach_file(file_name)
message.send()

字符串
这里有一个类似的问题:How to send an email with attachment?
但没有解决方案,我无法发送电子邮件,而不保存在磁盘上暂时。
有什么想法吗?

3b6akqbq

3b6akqbq1#

您可以使用StringIO在内存中写入工作簿:

import StringIO
f = StringIO.StringIO() # create a file-like object 
book = xlwt.Workbook()
sheet = book.add_sheet("XYZ")
book.save(f)

message = EmailMessage(subject="Subject", body="body",
         from_email="random@gmail.com", 
         to=email_list)
message.attach('filename.xlsx', f.getvalue(), "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet") #get the stream and set the correct mimetype
message.send()

字符串
取自xlwt write excel sheet on the fly

fnatzsnv

fnatzsnv2#

StringIO不适用于我(Python 3.9.17和Django 3.2.13),我不得不使用BytesIO:

import io
from django.core.mail import EmailMessage

mail = EmailMessage(subject="my test mail",
                    to=['you@example.com'],
                    body="this is my message")

wb = xlwt.Workbook(encoding='utf-8')
ws = wb.add_sheet('TEST')
# add stuff to worksheet...

with io.BytesIO() as xls:
    wb.save(xls)
    mail.attach(filename="test-attach.xls", 
                content=xls.getvalue(), 
                mimetype="application/ms-excel")

mail.send(fail_silently=False)

字符串

相关问题