【问题标题】:Django Html email adds extra characters to the email bodyDjango Html 电子邮件向电子邮件正文添加额外字符
【发布时间】:2010-12-20 12:52:29
【问题描述】:

我正在使用 Django 发送一封包含文本部分和 HTML 部分的电子邮件。代码如下:

主题 = request.session.get('email_subject', 无) from_email = request.session.get('user_email', 无) 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), '链接': "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), '链接': "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)) 电子邮件 = EmailMultiAlternatives(主题,text_content,from_email,[to],bcc) email.attach_alternative(html_content, "text/html") 发送 = email.send()

当用户收到电子邮件时,其中包含以下文本:“Content-Type: text/html; charset=utf-8”。有什么好办法可以解决吗?

【问题讨论】:

    标签: python django email


    【解决方案1】:

    您正在使用render_to_response 生成html_contenttext_content,这将返回一个HttpResponse 对象。

    如果您希望 html_contenttext_content 成为字符串,那么请改用 render_to_string

    您可以使用以下行导入render_to_string

    from django.template.loader import render_to_string
    

    【讨论】:

      【解决方案2】:

      在你接受 Alasdair 的建议之前,启动 shell 并查看 render_to_stringrender_to_response 的输出。 shell 可能会帮助您在未来解决类似的问题。

      您提到的“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
      >>>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-05-29
        • 2015-09-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-02-13
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多