2017-09-05 153 views
2

我试图创建一个使用send_mass_email发送HTML电子邮件响应的联系表单,但我不断收到语法错误。发送HTML电子邮件Django 1.9

我有我的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, ['[email protected]'], html_message=html_content) 
      message2 = (subject, message, from_email, ['[email protected]'], 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, ['[email protected]'], html_message=html_content) 
SyntaxError: invalid syntax 
+2

是的,这是无效的语法;在元组内没有关键字参数这样的事情。你想做什么? –

+0

我想将welcome.html分配给html_message参数,所以当发送消息时它使用welcome.html。并在welcome.html中指定表单变量主题和消息。 – Ankh2054

+0

但是元组中没有“html_message参数”。 –

回答

1

用于发送电子邮件的良好做法是附加既是HTML和纯文本版本:

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

然后,给出了一堆EmailMultiAlternatives情况下,你C和散装通过connection.send_messages(messages)发送所有的人 - 见this answer

1

这是最终的工作版本。

# 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': ['[email protected]'], 
     '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.')