Как создать функцию для отправки электронной почты, форматирующей html-сообщение со списком переменных?

Я пытаюсь создать функцию в django для отправки моих HTML шаблонов электронной почты с определенными переменными.

Вот что у меня есть на данный момент:

from django.core.mail import send_mail
from django.template.loader import render_to_string
from django.core.mail import get_connection
from django.utils.html import strip_tags
from otr import settings


def send_email(subject, email_template, recipient, username, password, variable_list):
    html_message = render_to_string(email_template, {'context': 'values'})

    for variable in variable_list:
        html_message.format(variable)

    plain_message = strip_tags(html_message)
    recipient = recipient

    with get_connection(
            host=settings.EMAIL_HOST,
            port=settings.EMAIL_PORT,
            username=username,
            password=password,
            use_tls=True
    ) as connection:
        send_mail(subject, plain_message, 'Me', [recipient], fail_silently=False,
                  html_message=html_message, connection=connection)

Затем я хочу вызвать эту функцию для использования в различных представлениях django, например:

subject = "My subject"
email_template = "emails/followup_email.html"
recipient = queryset.customer_email
username = username_variable
password = password_variable
customer_name = "Bob"
dear_user = "my_name"
phone_number = "1111111111"
sincerely_user = "my_name"
variable_list = [customer_name, dear_user, phone_number, sincerely_user]

send_email(subject, email_template, recipient, username, password, variable_list)

Я продолжаю получать "Replacement index 1 out of range for positional args tuple", поэтому я предполагаю, что не могу сделать цикл for таким образом, чтобы отформатировать HTML письмо со списком переменных. Кто-нибудь знает, как сделать это по-другому?

Предполагая, что все остальное правильно Replacement index 1 out of range for positional args tuple ошибка, которую вы получаете, вызвана циклом for в функции send_email. Замените эти две строки на -

html_message.format(*variable_list)

Примечание: Строка html_message должна содержать столько же заполнителей {}, сколько элементов в variable_list, т.е. 4 в данном случае, чтобы format работала правильно.

Вернуться на верх