如何在 Python Django 中使用 email_user 发送包含 HTML 和 CSS 的电子邮件?

How to send an email using email_user containing HTML and CSS in Python Django?

我正在通过用户为我的博客注册的电子邮件向用户发送激活 link。我正在使用以下代码行在我的注册视图中发送电子邮件。我没有使用 EmailMultiAlternatives 或 send_email,因为我正在为注册用户创建一个唯一令牌,我想使用 email_user,它将自动处理电子邮件地址:-

current_site = get_current_site(request)
subject = 'Activate Your Account'
message = render_to_string('accounts/account_activation_email.html', {
                'user': user,
                'domain': current_site.domain,
                'uid': urlsafe_base64_encode(force_bytes(user.pk)).decode(),
                'token': account_activation_token.make_token(user),
            })
message.content_subtype = "html"
user.email_user(subject, message)

我在我的模板 account_activation_email.html 中添加了 html 和 css,如下所示:-

{% autoescape off %}

<!DOCTYPE html>
<html>
  <head>
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <title>Activate your SaralGyaan account</title>

    <style type="text/css" rel="stylesheet" media="all">

    [styles go there not shown due to beverity]
    </style>
  </head>
  <body>
    <span class="preheader">Use this link to activate your SaralGyaan account. The link is only valid for 24 hours.</span>
    <table class="email-wrapper" width="100%" cellpadding="0" cellspacing="0">
      <tr>
        <td align="center">
          <table class="email-content" width="100%" cellpadding="0" cellspacing="0">
            <tr>
              <td class="email-masthead">
                <a href="https://saralgyaan.com" class="email-masthead_name">
        SaralGyaan
      </a>
              </td>
            </tr>
            <!-- Email Body -->
            <tr>
              <td class="email-body" width="100%" cellpadding="0" cellspacing="0">
                <table class="email-body_inner" align="center" width="570" cellpadding="0" cellspacing="0">
                  <!-- Body content -->
                  <tr>
                    <td class="content-cell">
                      <h1>Hi {{user.get_full_name}},</h1>
                      <p>Thank you for registering your SaralGyaan's account. Please click the link below to activate your account. <strong>This link is only valid for the next 24 hours.</strong></p>
                      <!-- Action -->
                      <table class="body-action" align="center" width="100%" cellpadding="0" cellspacing="0">
                        <tr>
                          <td align="center">
                            <!-- Border based button
                       https://litmus.com/blog/a-guide-to-bulletproof-buttons-in-email-design -->
                            <table width="100%" border="0" cellspacing="0" cellpadding="0">
                              <tr>
                                <td align="center">
                                  <table border="0" cellspacing="0" cellpadding="0">
                                    <tr>
                                      <td>
                                        <a href="{{ protocol }}://{{ domain }}{% url 'activate' uidb64=uid token=token %}" class="button button--green" target="_blank">Activate your account</a>
                                      </td>
                                    </tr>
                                  </table>
                                </td>
                              </tr>
                            </table>
                          </td>
                        </tr>
                      </table>
                      <p> If you have not created an account, please ignore this email or <a href="mailto:support@saralgyaan.com">contact support</a> if you have questions.</p>
                      <p>Thanks,
                        <br>The SaralGyaan Team</p>
                      <!-- Sub copy -->
                      <table class="body-sub">
                        <tr>
                          <td>
                            <p class="sub">If you’re having trouble with the button above, copy and paste the URL below into your web browser.</p>
                            <p class="sub">{{ protocol }}://{{ domain }}{% url 'activate' uidb64=uid token=token %}</p>
                          </td>
                        </tr>
                      </table>
                    </td>
                  </tr>
                </table>
              </td>
            </tr>
            <tr>
              <td>
                <table class="email-footer" align="center" width="570" cellpadding="0" cellspacing="0">
                  <tr>
                    <td class="content-cell" align="center">
                      <p class="sub align-center">&copy; 2018 SaralGyaan. All rights reserved.</p>
                      <p class="sub align-center">
                        [SaralGyaan]
                      </p>
                    </td>
                  </tr>
                </table>
              </td>
            </tr>
          </table>
        </td>
      </tr>
    </table>
  </body>
</html>

但我收到的电子邮件不是 html 版本,而是纯文本。此 html 代码没有错误,因为我在我的密码重置电子邮件中使用了相同的代码,并且在那里工作正常。

您不能在电子邮件中单独发送 HTML。 HTML 作为纯文本的替代发送。

使用html_message发送html部分,使用message纯文本发送。

message = render_to_string('template.txt', ...)
html_message = render_to_string('textmplate.html', ...)