Python 发送HTML电子邮件Django 1.9

Python 发送HTML电子邮件Django 1.9,python,django,Python,Django,我试图创建一个联系人表单,使用send_mass_email发送HTML电子邮件回复,但我一直收到一个语法错误 我的views.py中有以下代码 def email(request, template='marketing/email.html'): form = ContactForm(request.POST or None) if form.is_valid(): subject = form.cleaned_data['subject']

我试图创建一个联系人表单,使用send_mass_email发送HTML电子邮件回复,但我一直收到一个语法错误

我的views.py中有以下代码

def email(request, template='marketing/email.html'):
    form = ContactForm(request.POST or None)
    if form.is_valid():
        subject = form.cleaned_data['subject']
        from_email = form.cleaned_data['from_email']
        message = form.cleaned_data['message']
        html_content = render_to_string(
            'marketing/welcome.html',
            {
                'message': message,
                'subject': subject,

            }
        )
        try:
            message1 = (subject, message, from_email, ['test@test.com'], html_message=html_content)
            message2 = (subject, message, from_email, ['test@test.com'], html_message=html_content)
            send_mass_mail((message1, message2), fail_silently=False)
        except BadHeaderError:
            return HttpResponse('Invalid header found.')
        return redirect('thanks')
    context = {
            "form": form,

        }
    return render(request, template, context)

def thanks(request):
    return HttpResponse('Thank you for your message.')
我一直得到以下错误

    message1 = (subject, message, from_email, ['test@test.com'], html_message=html_content)
SyntaxError: invalid syntax

发送电子邮件的最佳做法是附加HTML和纯文本版本:

msg = EmailMultiAlternatives(subject, message_plaintext, from_email, recipient_list)
msg.attach_alternative(message_html, "text/html")

然后,给定一组
EmailMultiAlternatives
实例,您可以通过
连接批量发送所有实例。发送消息(messages)
-请参阅。

这是最终的工作版本

# Mass Send Email function  

def get_rendered_html(template_name, context={}):
    html_content = render_to_string(template_name, context)
    return html_content


def send_email(subject, html_content, text_content=None, from_email=None, recipients=[], attachments=[], bcc=[], cc=[]):
    # send email to user with attachment
    if not from_email:
        from_email = settings.DEFAULT_FROM_EMAIL
    if not text_content:
        text_content = ''
    email = EmailMultiAlternatives(
        subject, text_content, from_email, recipients, bcc=bcc, cc=cc
    )
    email.attach_alternative(html_content, "text/html")
    for attachment in attachments:
        # Example: email.attach('design.png', img_data, 'image/png')
        email.attach(*attachment)
    email.send()


def send_mass_mail(data_list):
    for data in data_list:
        template = data.pop('template')
        context = data.pop('context')
        html_content = get_rendered_html(template, context)
        data.update({'html_content': html_content})
        send_email(**data)


# Contact Form 
def HomePage(request, template='marketing/home.html'):
    form = ContactForm(request.POST or None)
    if form.is_valid():
        name = form.cleaned_data['name']
        from_email = form.cleaned_data['from_email']
        message = form.cleaned_data['message']
        phone = form.cleaned_data['phone']
        # Create message1 to send to poster
        message1 = {
        'subject': 'Test',
        'text_content': message,
        'from_email': from_email,
        'recipients': [from_email],
        'template': "marketing/welcome.html",
        'context': {"message": message,
                    "name": name,
                    "phone": phone,

                    }


        }
        # Create message1 to send to website admin
        message2 = {
        'subject': 'Test',
        'text_content': message,
        'from_email': from_email,
        'recipients': ['test@test.com'],
        'template': "marketing/welcome.html",
        'context': {"message": message,
                    "name": name,
                    "phone": phone,

                    }


        }

        try:
            send_mass_mail([message1])

        except BadHeaderError:
            return HttpResponse('Invalid header found.')
        return redirect('thanks')
    context = {
            "form": form,

        }
    return render(request, template, context)

def thanks(request):
    return HttpResponse('Thank you for your message.')

是的,这是无效的语法;元组中没有关键字参数。你想做什么?我想把welcome.html分配给html_message参数,所以当消息发送时,它使用welcome.html。在welcome.html中指定表单变量subject和message。但是元组中没有“html\u message参数”。例如,发送到
send\u mass\u mail
的元组必须只有4个参数。如果您认为传递任何元组或dict都值得推广,那么您可以提出一个问题。