Gmail не отображает электронную почту с HTML-разрывами должным образом при отправке из Django

В настоящее время я использую Django для отправки электронного письма пользователю, который забыл свой пароль. Все остальные почтовые клиенты правильно обрабатывают письмо с перерывами. Однако Gmail, похоже, не заботится о html и сжимает весь текст вместе.

Вот как выглядит письмо при отображении в Hotmail:

Привет Боб,

Вы получили это электронное письмо, потому что вы (или кто-то выдавал себя за вас) запросили новый пароль для вашей учетной записи. Если вы не запрашивали это письмо, вы можете сообщить нам об этом по адресу [email protected].

Чтобы сбросить пароль, введите ниже временный пароль для входа.

ВРЕМЕННЫЙ ПАРОЛЬ: seBDTZK4cc

После того, как вы вошли в систему, вы можете изменить свой пароль в опции «Редактировать профиль» в разделе «Учетная запись» в Настройках.

-Команда почтового приложения

Однако в Gmail это выглядит так!

Здравствуйте, Боб! Вы получили это письмо, потому что вы (или кто-то выдавал себя за вас) запросили новый пароль для вашей учетной записи. Если вы не запрашивали это письмо, вы можете сообщить нам об этом по адресу [email protected]. Чтобы сбросить пароль, введите ниже временный пароль для входа в систему. ВРЕМЕННЫЙ ПАРОЛЬ: 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 [email protected].</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?


person deadlock    schedule 07.08.2013    source источник
comment
У вас есть дыра XSS; вам нужно HTML-экранировать имя пользователя и пароль.   -  person SLaks    schedule 07.08.2013


Ответы (1)


</br> недействителен HTML.

Вы должны написать <br> (без закрывающего тега) или XML-стиль <br /> (самозакрывающийся тег)

person SLaks    schedule 07.08.2013
comment
не могли бы вы дать мне более подробный ответ, используя код, который я дал, чтобы я мог проголосовать за ваш ответ и принять его! :) - person deadlock; 07.08.2013
comment
Вы предлагаете что-то подобное? «Здравствуйте,% s, ‹br› ‹br› Вы получили это письмо, потому что вы (или кто-то выдавал себя за вас) запросили отправку нового пароля для вашей учетной записи. Если вы не запрашивали это письмо, вы можете сообщить нам об этом по адресу [email protected]. ‹Br› ‹br› Чтобы сбросить пароль, введите ниже временный пароль для входа в систему. ‹Br› ‹br› ‹b› ВРЕМЕННЫЙ ПАРОЛЬ : ‹B›% s ‹br› ‹br› После входа в систему вы можете изменить свой пароль с помощью параметра «Редактировать профиль» в разделе «Учетная запись» в настройках. ‹Br› ‹br› -Команда MailApp? - person deadlock; 07.08.2013