使用 html_message 发送电子邮件

问题描述

我想使用 Django 模板发送 HTML 电子邮件,如下所示:

<!DOCTYPE html>
<html lang="en">
<head>
    <Meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    Hello <strong>{{ message }}</strong> - your account is activated.
</body>
</html>

我还想通过电子邮件从后端发送数据。在此示例中,我想从后端发送带有电子邮件模板的消息。

这是我的观点:

def home(request):
    message_name = "NAME"
    message_email = "EMAIL"
    message = "USER"
    msg_html = render_to_string('email/email.html')

    send_mail(
        'message from ' + message_name,# subject
        message,# message
        message_email,# from email
        ['myemail@outlook.de'],# To Email
        html_message=msg_html,)
    context = {'message': message,'message_name': message_name,'message_email': message_email}
    return render(request,'email/email.html',context)

当我收到电子邮件时,我只收到文本,而不是在本例中为 USER 的 {{ message }}。

解决方法

您需要将上下文传递到您的 render_to_string 调用中。 render_to_string 获取模板并返回带有传递上下文的 HTML。然后您可以将其传递给 send_mail。所以把代码改成:

[...]
message_name = 'NAME'
message_email = 'EMAIL'
message = 'USER'
context = {'message': message,'message_name': message_name,'message_email': message_email}
msg_html = render_to_string('email/email.html',context=context)
[...]