2 Stimmen

Django Html E-Mail fügt zusätzliche Zeichen in den E-Mail-Text ein

Ich verwende Django, um eine E-Mail zu senden, die einen Textteil und einen HTML-Teil hat. Hier ist der Code:

    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()

Wenn der Benutzer die E-Mail erhält, enthält sie diesen Text: "Inhalt-Typ: text/html; charset=utf-8". Gibt es eine gute Möglichkeit, dies loszuwerden?

5voto

Alasdair Punkte 275312

Sie erzeugen html_content y text_content con render_to_response die ein HttpResponse Objekt.

Wie auch immer Sie wollen html_content y text_content Zeichenketten sein, also verwenden Sie render_to_string stattdessen.

Sie können importieren render_to_string mit der folgenden Zeile:

from django.template.loader import render_to_string

2voto

istruble Punkte 12793

Bevor Sie den Vorschlag von Alasdair befolgen, starten Sie die Shell und sehen Sie sich die Ausgabe von render_to_string y render_to_response . Die Shell könnte Ihnen helfen, ein solches Problem in Zukunft zu lösen.

Die von Ihnen erwähnte Zeile "Content-Type: text/html; charset=utf-8" ist der Header für die von HttpResponse erzeugte Antwort. Sie ist das einzige Element in der Kopfzeile für ein einfaches HttpResponse-Objekt wie das in Ihrem Beispiel.

$ ./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
>>>

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X