2017-09-05 9 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内で、フォーム変数subjectとmessageを割り当てます。 – Ankh2054

+0

しかし、タプルには "html_messageパラメータ"はありません。 –

答えて

1

電子メールを送信するためのグッドプラクティスHTMLとプレーンテキストバージョンの両方添付することです:EmailMultiAlternativesインスタンスの束与えられ、その後

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

を、あなたはconnection.send_messages(messages)を経由して一括でそれらのすべてを送るCAND - 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.') 
関連する問題