首页 文章

Django Html电子邮件为电子邮件正文添加了额外的字符

提问于
浏览
2

我正在使用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 回答

  • 5

    您正在使用 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生成的响应的 Headers . 它是标头中唯一一个简单的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
    >>>
    

相关问题