Seite 1 von 1

Umlaute als Problem

Verfasst: Mittwoch 26. Dezember 2012, 14:38
von pixewakb
In meinem Quelltext - ich will eine E-Mail über das email-Paket verschicken - steht momentan:

Code: Alles auswählen

from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText

...

part1 = MIMEText(text, 'text')
part2 = MIMEText(html, 'html')
Ich habe jetzt das Problem, dass das Skript bei Umlauten einen Fehler produziert. Was muss ich tun, damit der Text, der verschickt wird, als Utf-8 erkannt wird? Die Codierung an der Stelle mit text und html kann ich m. E. nicht ändern, weil je nach Zielplattform entweder die text-Version oder die html-Version angezeigt werden soll.

Ich habe schon etwas gegoogelt, aber nichts gefunden, was konkret für meinen Fall taugt. Ich habe momentan noch ein grundsätzliches Verständnisproblem mit utf-8 und der Codierungsgeschichte - habe ich noch nicht verstanden.

Re: Umlaute als Problem

Verfasst: Mittwoch 26. Dezember 2012, 14:43
von pixewakb
Manchmal hilft es, ein Problem hier zu posten. :P

Ich habe hier eine brauchbare Hilfe/Lösung für mein Problem entdeckt:

http://stackoverflow.com/questions/8171 ... ding-email

Re: Umlaute als Problem

Verfasst: Freitag 28. Dezember 2012, 18:10
von pixewakb
Ich nutze jetzt:

Code: Alles auswählen

            part1 = MIMEText(text_pers.encode('utf-8'), 'text', 'utf-8')
            part2 = MIMEText(html_pers.encode('utf-8'), 'html', 'utf-8')
Läuft auch alles, aber die Codierung der E-Mail im Posteingang ist base64, ich hätte es aber dort auch gerne, dass lesbarer Quelltext ankommt. Lesbar ist:

Code: Alles auswählen

Content-Type: text/html; charset="utf-8"
MIME-Version: 1.0
Content-Transfer-Encoding: base64

Re: Umlaute als Problem

Verfasst: Samstag 29. Dezember 2012, 01:30
von jerch
Das Transfer-Encoding für UTF-8 ist mit BASE64 im Charset-Wörterbuch hartkodiert. Du kannst es aber auf 'quoted-printable' umstellen:

Code: Alles auswählen

>>> from email.mime.text import MIMEText
>>> from email.charset import add_charset, QP, SHORTEST
>>> add_charset('utf-8', SHORTEST, QP, 'utf-8')
>>> MIMEText('Hür kömmt die Mäus.', _charset='utf-8').as_string()
'Content-Type: text/plain; charset="utf-8"\nMIME-Version: 1.0\nContent-Transfer-Encoding: quoted-printable\n\nH=C3=BCr k=C3=B6mmt die M=C3=A4us.'