首页 > 解决方案 > 电子邮件正文显示 html 代码代替 django 中的模板

问题描述

我在 django 中使用 smtp 发送电子邮件,但它显示了它的 HTML 代码。
这是我的 Django 视图和模板

视图.py

current_site = get_current_site(request)
mail_subject = 'Activate Your Account'
mail_message = render_to_string('mail_body.html', {
    'user' : user,
    'domain' : current_site.domain,
    'uid' : urlsafe_base64_encode(force_bytes(user.pk)),
    'token' : default_token_generator.make_token(user)
})

mail_to = email,
email = EmailMessage( mail_subject, mail_message, to = mail_to )
email.send()

mail_body.html

<div>
{% autoescape off %}
<b class="text-center">Hello {{ user.username }}</b><br>
Please click on the link below to verify your email address and complete your registration.

<a class="btn btn-primary btn-block" href="http://{{ domain }}{% url 'auth' uidb64=uid token=token 
%}" role="button" target="_blank">Verify</a>
<hr />
<br />
If you think, it's not you, then just ignore this email. 
{% endautoescape %} 
</div>

标签: djangodjango-viewsdjango-templatesdjango-email

解决方案


根据文档:https ://docs.djangoproject.com/en/3.1/topics/email/

您可以使用函数 send_mail 作为 EmailMessage 对象的包装器,并且 send_mail 函数允许您设置 html_message:

from django.core.mail import send_mail
send_mail(mail_subject, '', 'you@example.com', [mail_to], html_message=mail_message)

推荐阅读