Attach generated CSV file to email and send with Django

Is there a particular reason you're using an additional function at all? Just build your csv in memory - you can't avoid that if you're attaching it to email - and send that.

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')

Python 3 and DictWriter example:

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()

Tags:

Python

Django