【问题标题】:Django email message as HTMLDjango 电子邮件作为 HTML
【发布时间】:2016-07-20 23:08:50
【问题描述】:

我有一个电子邮件模板,用于发送不同类型的电子邮件。我宁愿不保留多个电子邮件 HTML 模板,因此处理此问题的最佳方法是自定义消息内容。像这样:

def email_form(request):
    html_message = loader.render_to_string(
            'register/email-template.html',
            {
                'hero': 'email_hero.png',
                'message': 'We\'ll be contacting you shortly! If you have any questions, you can contact us at <a href="#">meow@something.com</a>',
                'from_email': 'lala@lala.com',
            }
        )
    email_subject = 'Thank you for your beeswax!'
    to_list = 'johndoe@whatever.com'
    send_mail(email_subject, 'message', 'from_email', [to_list], fail_silently=False, html_message=html_message)
    return

但是,当发送电子邮件时,html 代码不起作用。消息按原样显示,尖括号和所有内容。有没有办法强制它呈现为 HTML 标签?

【问题讨论】:

  • 您生成的 HTML 是否具有正确的元属性?您可以粘贴生成的 HTML 顶部的某些部分吗?

标签: html django email django-templates


【解决方案1】:

使用EmailMessage 更省事:

第一次导入EmailMessage

from django.core.mail import EmailMessage

然后使用此代码发送 html 电子邮件:

email_body = """\
    <html>
      <head></head>
      <body>
        <h2>%s</h2>
        <p>%s</p>
        <h5>%s</h5>
      </body>
    </html>
    """ % (user, message, email)
email = EmailMessage('A new mail!', email_body, to=['someEmail@gmail.com'])
email.content_subtype = "html" # this is the crucial part 
email.send()

【讨论】:

  • 它对我有用,谢谢
【解决方案2】:

您可以使用 django 中的 EmailMultiAlternatives 功能,而不是使用发送邮件发送邮件。您的代码应如下所示。

from django.core.mail import EmailMultiAlternatives

def email_form(request):
    html_message = loader.render_to_string(
            'register/email-template.html',
            {
                'hero': 'email_hero.png',
                'message': 'We\'ll be contacting you shortly! If you have any questions, you can contact us at <a href="#">meow@something.com</a>',
                'from_email': 'lala@lala.com',
            }
        )
    email_subject = 'Thank you for your beeswax!'
    to_list = 'johndoe@whatever.com'
    mail = EmailMultiAlternatives(
            email_subject, 'This is message', 'from_email',  [to_list])
    mail.attach_alternative(html_message, "text/html")
    try:
        mail.send()
    except:
        logger.error("Unable to send mail.")

【讨论】:

  • 感谢您的回复!我尝试实现您的解决方案,以及根据 Django 自己的文档来使用视图。不幸的是,它没有用。 HTML 标签仍然没有解析。我也试过用“html”代替“text/html”,也没用。
【解决方案3】:

解决了。不是很优雅,但它确实有效。万一有人好奇,放在电子邮件模板中的变量应该是这样实现的:

{{ your_variable|safe|escape }}

然后就可以了!谢谢大家!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-04-27
    • 1970-01-01
    • 2017-07-04
    • 2011-09-15
    • 1970-01-01
    • 2015-05-29
    • 2011-03-15
    • 2013-06-27
    相关资源
    最近更新 更多