2016-04-01 3 views
0

У меня есть шаблон электронной почты, который я использую для отправки электронных писем разных типов. Я бы предпочел не хранить несколько HTML-шаблонов электронной почты, поэтому лучший способ справиться с этим - настроить содержимое сообщения. Например:Django email как HTML

def email_form(request): 
    html_message = loader.render_to_string(
      'register/email-template.html', 
      { 
       'hero': 'email_hero.png', 
       'message': 'We\'ll be contacting you shortly! If you have any questions, you can contact us at <a href="#">[email protected]</a>', 
       'from_email': '[email protected]', 
      } 
     ) 
    email_subject = 'Thank you for your beeswax!' 
    to_list = '[email protected]' 
    send_mail(email_subject, 'message', 'from_email', [to_list], fail_silently=False, html_message=html_message) 
    return 

Когда отправляется электронное письмо, коды html не работают. Сообщение появляется, как это точно, угловые скобки и все. Есть ли способ заставить меня отображать HTML-теги?

+0

Имеет ли ваш сгенерированный HTML правильные мета-атрибуты? Можете ли вы вставить часть верхней части сгенерированного HTML? –

ответ

0

Решено. Не очень элегантный, но он работает. Если кому-то интересно, переменная, помещенная в шаблон электронной почты, должна быть реализована так:

{{ your_variable|safe|escape }} 

Тогда это работает! Спасибо, парни!

1

Вы можете использовать функцию EmailMultiAlternatives, присутствующую в django, вместо отправки почты с помощью отправки почты. Ваш код должен выглядеть как сниппет.

from django.core.mail import EmailMultiAlternatives 

def email_form(request): 
    html_message = loader.render_to_string(
      'register/email-template.html', 
      { 
       'hero': 'email_hero.png', 
       'message': 'We\'ll be contacting you shortly! If you have any questions, you can contact us at <a href="#">[email protected]</a>', 
       'from_email': '[email protected]', 
      } 
     ) 
    email_subject = 'Thank you for your beeswax!' 
    to_list = '[email protected]' 
    mail = EmailMultiAlternatives(
      email_subject, 'This is message', 'from_email', [to_list]) 
    mail.attach_alternative(html_message, "text/html") 
    try: 
     mail.send() 
    except: 
     logger.error("Unable to send mail.") 
+0

Спасибо, что ответили! Я попытался реализовать ваше решение, а также поиграть с представлением, основанным на собственных документах Django. К сожалению, это не сработало. Теги HTML все еще не анализируются. Я также попытался использовать «html» вместо «text/html», также не работал. – Bob