2009-11-26 3 views
2

Я использую Django для отправки электронной почты с текстовой частью и частью HTML. Вот код:Django Html email добавляет дополнительные символы в тело электронной почты

 
    subject = request.session.get('email_subject', None) 
    from_email = request.session.get('user_email', None) 
    to = request.session.get('user_email', None) 
    bcc = [email.strip() for email in request.session.get('email_recipients', None).split(settings.EMAIL_DELIMITER)] 

    text_content = render_to_response(email_text_template, { 
     'body': request.session.get('email_body', None), 
     'link': "http://%(site_url)s/ecard/?%(encoded_greeting)s" % { 
      'site_url': settings.SITE_URL, 
      'encoded_greeting': urlencode({'g': quote_plus(request.session.get('card_greeting'))}), 
     }, 
    }, context_instance=RequestContext(request)) 

    html_content = render_to_response(email_html_template, { 
     'body': request.session.get('email_body', None), 
     'link': "http://%(site_url)s/ecard/?%(encoded_greeting)s" % { 
      'site_url': settings.SITE_URL, 
      'encoded_greeting': urlencode({'g': request.session.get('card_greeting')}), 
     }, 
     'site_url': settings.SITE_URL, 
    }, context_instance=RequestContext(request)) 

    email = EmailMultiAlternatives(subject, text_content, from_email, [to], bcc) 
    email.attach_alternative(html_content, "text/html") 
    sent = email.send() 

Когда пользователь получает сообщение электронной почты, он имеет этот текст в нем: "Content-Type: Текст/html; кодировка = UTF-8". Есть ли хороший способ избавиться от этого?

ответ

5

Вы создаете html_content и text_content с render_to_response, который возвращает объект HttpResponse.

Однако вы хотите, чтобы html_content и text_content были строками, поэтому вместо этого используйте render_to_string.

Вы можете импортировать render_to_string с помощью следующей строки:

from django.template.loader import render_to_string 
2

Перед тем, как пойти с предложением Аласдера, в запустим оболочку и взглянуть на выходе из render_to_string и render_to_response. Оболочка просто поможет вам разобраться с такой проблемой в будущем.

Строка «Content-Type: text/html; charset = utf-8», которую вы упомянули, является заголовком для ответа, сгенерированного HttpResponse. Это единственный элемент в заголовке для простого объекта HttpResponse, подобного тому, который указан в вашем примере.

$ ./manage.py shell 
Python 2.6.3 (r263:75183, Oct 14 2009, 15:40:24) 
Type "help", "copyright", "credits" or "license" for more information. 
>>> from django.shortcuts import render_to_response 
>>> from django.template.loader import render_to_string 
>>> template = 'your_template.html' 
>>> print("\n".join(render_to_string(template).split('\n')[:3])) 
template-line-1 
template-line-2 
template-line-3 
>>> print("\n".join(str(render_to_response(template)).split('\n')[:3])) 
Content-Type: text/html; charset=utf-8 

template-line-1 
>>> 
Смежные вопросы