如何创建一个函数来发送电子邮件格式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)

我一直得到"替换索引1超出了位置参数元组"的范围,所以我猜我不能用这种方式做一个for循环来用变量列表格式化HTML电子邮件。有人知道怎么用另一种方式完成这个吗?

假设其他一切都是正确的Replacement index 1 out of range for positional args tuple错误,你得到的是由于send_email函数中的for循环。将这两行替换为-

html_message.format(*variable_list)

注意:html_message字符串应包含与variable_list(即4)中项目数量相同数量的占位符{},以便format正常工作。

最新更新