将生成的CSV文件附加到电子邮件并与Djang一起发送

2024-05-18 22:29:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要基于queryset结果生成csv文件,将结果文件作为附件附加到电子邮件并发送。如您所见,我需要遍历指定的_lead并将其写入一个文件,因此我认为yield可以做到这一点。现在,当我运行代码时,我会收到带有下面消息的附件的电子邮件,而不是我期望的行。如果使用return,则从queryset结果中获取一行。

<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","myemail@gmail.com",["myemail@gmail.com"])
    message.attach('invoice.csv', data(), 'text/csv')
    #message.to="myemail@gmail.com"
    message.send()
    return HttpResponseRedirect('/')

Tags: 文件csvcsvfilenamecommessagedata附件
3条回答

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',
        'from@email.com',
        ['to@email.com'],
    )
email.attach('file.csv', csvfile.getvalue(), 'text/csv')
email.send()

你使用附加功能有什么特别的原因吗?只需在内存中构建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","myemail@gmail.com",["myemail@gmail.com"])
message.attach('invoice.csv', csvfile.getvalue(), 'text/csv')
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",
        #     'xx@yy.com',
        #     ['zz@uu.com'],
        #     connection=connection,
        # )
        # email.attach('Report.html', body, 'text/html')
        # email.send()

相关问题 更多 >

    热门问题