Текст письма показывает html-код вместо шаблона в django

#django #django-views #django-templates #django-email

#django #django-просмотры #django-шаблоны #django-email

Вопрос:

Я отправляю электронное письмо с использованием smtp в django, но он показывает свой HTML-код.
Вот мой вид и шаблон django

view.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>
 

Комментарии:

1. Вы отправляете электронное письмо как необработанный текст, а не как HTML.

Ответ №1:

Согласно документации: 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)
 

Ответ №2:

Это потому, что вы используете второй параметр в EmailMessage . Это сообщение электронной почты в виде текста, а не HTML.

Вы можете использовать html_message=… параметр [Django-doc], чтобы указать сообщение в формате HTML. Вам все равно понадобится значение для второго параметра, обычно это электронное письмо, но в виде необработанного текста:

 mail_to = email,
raw_text = '… email, but then in raw text without makeup …'
email = EmailMessage(mail_subject, raw_text, to=mail_to, html_message=mail_message)
email.send() 

Ответ №3:

email.content_subtype=’html’ просто используйте это, и ваша проблема, скорее всего, будет решена