在Django 1.7中使用html发送电子邮件

时间:2014-11-25 09:09:45

标签: python html django email

send_mail()中,我们有一个新参数 - html_messageDocs

我有 email.html 文件,我想发送我的消息的html版本。我找不到Django 1.7的任何例子。

你可以告诉我一个方法,怎么做?我是否需要使用 os.open()我的html文件?

谢谢!

2 个答案:

答案 0 :(得分:7)

render_to_string:加载模板,呈现模板并返回结果stringhtml_message:如果提供了html_message,则默认消息将替换为Html消息。

邮件/ HTML-message.html

Hi {{ first_name }}.

    This is your {{ email }}

Thank you

<强> views.py

def mail_function(request):
    subject = 'Test Mail'
    from = 'info@domain.com'
    to = 'to@domain.com'
    c = Context({'email': email,
                 'first_name': first_name})
    html_content = render_to_string('mail/html-message.html', c)
    txtmes = render_to_string('mail/text-message.html', c)
    send_mail(subject,
              txtmes,
              from,
              [to],
              fail_silently=False,
              html_message=html_content)

答案 1 :(得分:0)

你不需要OS.open。您可以先创建一个html模板,然后使用get_template方法导入它。在你的 查看,添加以下内容:

应用/ view.py

from django.core.mail import EmailMultiAlternatives    
from django.http import HttpResponse
from django.template.loader import get_template

def send_mail(request):
    text = get_template('email_template.txt')
    html = get_template('email_template.html')
    data = {'templating variable': data_var}
    # If Client cant receive html mails, it will receive the text
    # only version. 

    # Render the template with the data
    content_txt = text.render(data)
    content_html = html.render(data)

    # Send mail
    msg = EmailMultiAlternatives(subject, content_text, from_email, [to])
    msg.attach_alternative(content_html, "text/html")
    msg.send()

注意:您不需要Djange 1.10+的上下文。在Django 1.8+中,模板的render方法采用context参数的字典。不推荐支持传递Context实例,并在Django 1.10 +。

中给出错误