【问题标题】:Gmail not rendering email with html breaks properly when sent from Django从 Django 发送时,Gmail 无法正确呈现带有 html 的电子邮件
【发布时间】:2013-08-09 07:41:43
【问题描述】:

我目前正在使用 Django 向忘记密码的用户发送电子邮件。所有其他电子邮件客户端都会正确呈现电子邮件,并带有中断。然而,Gmail 似乎并不关心 html,它会将所有文本压缩在一起。

这是电子邮件在 hotmail 中呈现时的外观:

你好,鲍勃,

您收到这封电子邮件是因为您(或冒充您的人)要求为您的帐户发送一个新密码。如果您没有请求此电子邮件,则可以通过 support@mailapp.com 告知我们。

要重设密码,请在下方输入临时密码登录。

临时密码:seBDTZK4cc

登录后,您可以在“设置”中“帐户”下的“编辑个人资料”选项中更改密码。

-邮件应用团队

但是在 gmail 中,它看起来像这样!:

您好 Bob,您收到这封电子邮件是因为您(或冒充您的人)请求为您的帐户发送一个新密码。如果您没有请求此电子邮件,那么您可以通过 support@mailapp.com 告知我们。要重置您的密码,请在下面输入临时密码以登录。临时密码:seBDTZK4cc一旦您登录,您可以在“设置中“帐户”下的“编辑个人资料”选项。-邮件应用团队

这会让拥有 gmail 帐户的用户感到困惑,因为临时密码正在与下一句组合在一起!

这是我用来发送电子邮件的 Django 代码:

def resetpassword(request): 
    data = json.loads(request.raw_post_data) 
    requestusername = data['username'] 
    requestemail = data['email'] 
    if User.objects.filter(username = requestusername).exists():
        user_who_forgot_password = User.objects.get(username = requestusername) 
        if user_who_forgot_password.email == requestemail: 

            password = User.objects.make_random_password() 
            user_who_forgot_password.set_password(password) 
            user_who_forgot_password.save()
            email = EmailMessage('Password Reset On Mail App', 'Hello %s,</br></br>You are receiving this email because you have (or someone pretending to be you has) requested a new password to be sent for your account. If you did not request this email then you can let us know at support@mailapp.com.</br></br>To reset your password, enter the temporary password below to login.</br></br><b>TEMPORARY PASSWORD:</b> %s</br></br>Once you are logged in, you can change your password in the "Edit Profile" option under "Account" in Settings.</br></br>-The MailApp Team' % (user_who_forgot_password.username, password), to = ['{email}'.format(email=requestemail,)]) 
            email.content_subtype = "html" 
            email.send() 
            print 'Password Email Sent' 
            return HttpResponse("Success") 
        else: 
            return HttpResponse("No email found") 
    else: 
        return HttpResponse("No username found")

我该如何解决它,以便它可以在 Gmail 中以像 Hotmail 一样正确显示的方式呈现?

【问题讨论】:

  • 你有一个 XSS 漏洞;您需要对用户名和密码进行 HTML 转义。

标签: html django gmail hotmail


【解决方案1】:

&lt;/br&gt; 是无效的 HTML。

你应该写&lt;br&gt;(没有结束标签),或者XML风格的&lt;br /&gt;(一个自结束标签)

【讨论】:

  • 您能否使用我提供的代码给我一个更详细的答案,以便我支持您的答案并接受它! :)
  • 你是在建议这样的事情吗? '您好 %s,

    您收到这封电子邮件是因为您(或冒充您的人)请求为您的帐户发送一个新密码。如果您没有请求此电子邮件,则可以通过 support@mailapp.com 告知我们。

    要重置密码,请在下面输入临时密码以登录。

    临时密码: %s

    登录后,您可以在“设置”的“帐户”下的“编辑个人资料”选项中更改密码。

    -MailApp 团队' ?
猜你喜欢
  • 2015-10-22
  • 1970-01-01
  • 2020-01-06
  • 2016-02-17
  • 1970-01-01
  • 1970-01-01
  • 2019-05-22
  • 1970-01-01
  • 2017-04-30
相关资源
最近更新 更多