Django Html 邮件在邮件正文中添加额外字符
我正在使用Django发送一封电子邮件,这封邮件有文本部分和HTML部分。以下是我的代码:
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: text/html; charset=utf-8”。有没有什么好的方法可以去掉这个内容呢?
2 个回答
2
在你采纳Alasdair的建议之前,先打开命令行,看看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
>>>
5
你正在使用 render_to_response
来生成 html_content
和 text_content
,这个方法会返回一个 HttpResponse
对象。
但是你希望 html_content
和 text_content
是字符串类型的,所以应该使用 render_to_string
来代替。
你可以用下面这一行来导入 render_to_string
:
from django.template.loader import render_to_string