Администратор django не отправляет html почту, вместо этого получил текстовый формат - PullRequest
0 голосов
/ 22 октября 2019

Я отправил электронное письмо, используя почту django, но электронное письмо отправлено в текстовом формате, а не в формате html, я не знаю почему ( Снимок экрана ). Пожалуйста, помогите мне в этом вопросе, спасибо.

Мой администратор:

from django.template.loader import render_to_string

@admin.register(ParentsProfile)
class ParentsProfile(admin.ModelAdmin):
    list_display = ('Father_Email','Fathers_Firstname' , 'Fathers_Middle_Initial', 'Fathers_Lastname', 'Request')
    ordering = ('Request',)
    search_fields = ('Request',)
    actions = ['Send_Email','Send_Email_Disapproved']

    def Send_Email(self, request, queryset):

        html_content = render_to_string('Homepage/email.html')
        for profile in queryset:
            send_mail(subject="Invite", message=html_content, from_email=settings.EMAIL_HOST_USER,
                recipient_list=[profile.Father_Email])

Мой шаблон электронной почты:

<img src="{% static 'unidalogo.png' %}" 
<p>Hi there</p>
<p>To: </p>
<p>Your Registration has been approved.</p>
<p>Please use this %s as your username and %s as your password</p>


<h2>REGISTRAR</h2>

Обновленный вопрос :

Я не знаю, как подключить profile.Father_Email и profile.Parent_Password к html_template:

context = {
     'femail': profile.Father_Email, 
     'fpassword': profile.Parent_Password, 
}
html_message = render_to_string('Homepage/email.html', {"context":context)

Шаблон:

<!DOCTYPE html>
{% load static %}
<html  >
<head>

<title>Email</title>

</head>
<body>
     <img src="{% static 'unidalogo.png' %}" title="" style="height: 6.1rem;">UNIDA CHRISTIAN COLLEGES

<p>To: {{ femail }}</p>

<p>Your Registration has been approved.</p>
<p>Please use this {{ femail }} as your username and {{ fpassword }} as your password</p>
<br><br><br>


<h2>REGISTRAR</h2>
</body>
</html>

1 Ответ

0 голосов
/ 23 октября 2019

Проблема возникла из-за того, что вы не указали send_email способ отправить ваше электронное письмо как text/html тип контента. Чтобы обеспечить этот индикатор, вы должны указать html_message в качестве параметра метода send_email, следуя указаниям Django, отправляющим электронную почту документы .

html_message: Если указан html_message, тоитоговое письмо будет составным / альтернативным, с сообщением в качестве типа текста / обычного содержимого и html_message в качестве типа текста / HTML.

Таким образом, это будет выглядеть так:

for profile in queryset:
    html_content = render_to_string('Homepage/email.html')

    send_mail(subject="Invite", message=html_content, from_email=settings.EMAIL_HOST_USER, recipient_list=[profile.Father_Email], html_message=html_content)

Если вы хотите передать контекст в свой шаблон, вы должны создать словарь и затем передать его в метод render_to_string через контекстный параметр, например:

for profile in queryset:
    context = {
        'email': profile.Father_Email,
        'password': profile.Parent_Password,
    }
    html_content = render_to_string('Homepage/email.html', context=context)

    send_mail(subject="Invite", message=html_content, from_email=settings.EMAIL_HOST_USER, recipient_list=[profile.Father_Email], html_message=html_content)

и затем в вашем шаблоне:

<p>To: {{ email }}</p>

<p>Your Registration has been approved.</p>
<p>Please use this {{ email }} as your username and {{ password }} as your password</p>

, тогда ваше электронное письмо будет иметь email и password, как и ожидалось

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...