Umlaute als Problem

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Benutzeravatar
pixewakb
User
Beiträge: 1412
Registriert: Sonntag 24. April 2011, 19:43

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.
Benutzeravatar
pixewakb
User
Beiträge: 1412
Registriert: Sonntag 24. April 2011, 19:43

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
Benutzeravatar
pixewakb
User
Beiträge: 1412
Registriert: Sonntag 24. April 2011, 19:43

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
jerch
User
Beiträge: 1669
Registriert: Mittwoch 4. März 2009, 14:19

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.'
Antworten