Присоединить сгенерированный CSV файл к электронной почте и отправить с помощью Django
Мне нужно создать файл csv на основе результата запроса, прикрепить полученный файл к электронному письму как вложение и отправить. Как вы можете видеть, мне нужно перебирать назначенные_лицы и записывать их в файл, поэтому я думал, что выход будет хитом. Теперь, когда я запускаю код, я получаю электронное письмо с вложением с сообщением ниже, а не строками, которые я ожидаю. Если я использую return, я получаю одну строку из результата запроса.
<generator object data at 0x7f5e508d93c0>
def send_lead_reminder(request):
usercompany = Listing.objects.filter(submitted_by=request.user)
assigned_leads = lead.objects.filter(assigned_to__in=usercompany).distinct()
def data():
csvfile=StringIO.StringIO()
csvwriter =csv.writer(csvfile)
for leads in assigned_leads:
csvwriter.writerow([leads.business_name, leads.first_name, leads.last_name, leads.email, leads.phone_number,leads.address, leads.city, leads.state, leads.zipcode, leads.submission_date, leads.time_frame, leads.comments])
yield csvfile.getvalue()
message = EmailMessage("Hello","Your Leads","[email protected]",["[email protected]"])
message.attach('invoice.csv', data(), 'text/csv')
#message.to="[email protected]"
message.send()
return HttpResponseRedirect('/')
Ответы
Ответ 1
Есть ли конкретная причина, по которой вы используете дополнительную функцию? Просто создайте свой csv в памяти - вы не можете этого избежать, если вы прикрепляете его к электронной почте - и отправьте это.
assigned_leads = lead.objects.filter(assigned_to__in=usercompany).distinct()
csvfile = StringIO.StringIO()
csvwriter = csv.writer(csvfile)
for leads in assigned_leads:
csvwriter.writerow([leads.business_name, leads.first_name, leads.last_name, leads.email, leads.phone_number,leads.address, leads.city, leads.state, leads.zipcode, leads.submission_date, leads.time_frame, leads.comments])
message = EmailMessage("Hello","Your Leads","[email protected]",["[email protected]"])
message.attach('invoice.csv', csvfile.getvalue(), 'text/csv')
Ответ 2
DictWriter
Python 3 и DictWriter
:
import csv
from io import StringIO
from django.core.mail import EmailMessage
rows = [{'col1': 'value1', 'col2': 'value2'}]
csvfile = StringIO()
fieldnames = list(rows[0].keys())
writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
writer.writeheader()
writer.writerows(rows)
email = EmailMessage(
'Subject',
'Body',
'[email protected]',
['[email protected]'],
)
email.attach('file.csv', csvfile.getvalue(), 'text/csv')
email.send()
Ответ 3
Neither are working :(
Approach 1:
msg = EmailMultiAlternatives(subject, body, from_email, [to])
msg.attach_alternative(file_content, "text/html")
msg.content_subtype = 'html'
msg.send()
Approach 2:
# email = EmailMessage(
# 'Report Subject',
# "body",
# '[email protected]',
# ['[email protected]'],
# connection=connection,
# )
# email.attach('Report.html', body, 'text/html')
# email.send()