django将csv附加到电子邮件

时间:2019-03-12 09:19:45

标签: python django

我目前正在尝试将csv附加到电子邮件中,但是我一直收到错误消息,此刻我的代码是这样的:

error_list=[{'error_1': 0, 'error_2':1}, {'error_1': 2, 'error_2': 1}]
with open('errors.csv', "w") as infile:
    writer = csv.DictWriter(infile, fieldnames=error_list[0].keys())
    writer.writeheader()
    for data in error_list:
        writer.writerow(data)
mail = EmailMessage(subject='Test', from_email=EMAIL_HOST_USER, to=['example@example.com',])
mail.attach('errors.csv', infile, 'text/csv')
mail.send()

我不太确定我要去哪里—现在我收到错误消息:“连接意外关闭:[WinError 10054]远程主机强行关闭了现有连接”

1 个答案:

答案 0 :(得分:0)

EmailMessage.attach()的第二个参数应该是文件的 content 作为字节串(在python2中为str,在python3中为byte),而不是{ {1}}对象(特别是没有一个在写模式下打开的对象)。

实际上,在此处写入文件不仅无用且效率低下,而且还乞求并发问题,尤其是当您对所有人使用相同的文件名时(请记住,通常使用多个进程来处理wsgi应用程序来处理并发请求)。在当前工作目录中创建文件是FWIW的另一个坏主意,您想在已知位置(且位于代码库之外)为此类事情设置一个特定目录-但无论如何:您不需要在这里放置文件(除非您的json是 huge (这种情况很少见),否则您可以使用像file这样的内存中类似文件的对象。