Email versenden: Wie bekomme ich Umlaute richtig dargestellt?

  • Tach,

    ich möchte aus Python Emails verschicken. Das klappt auch, allerdings werden Umlaute etc. nicht korrekt dargestellt.

    Nach ein bisschen Recherche habe ich herausgefunden, dass man den Charset im Header angeben muss, und dies getrennt für Subject und eigentlich Text. Ist das so richtig?

    Kann mir jemand für das folgende Script einen Tipp geben, wie ich das übergebe? Wie Ihr seht, hab ich schon paar Sachen ausprobiert, aber erfolglos...

    Die Dokumentation von email.mime.text scheint zwar sehr detailliert zu sein, aber leider fehlen dort Beispiele, die ich als Anfänger doch so dringend brauche... :daumendreh2:

    Schon mal herzlichen Dank für Eure Hilfe!!

    Achso, der eigentliche Text kommt aus einer Website und wird dort über requests ausgelesen, falls das relevant ist...

    Einmal editiert, zuletzt von johneff (20. Januar 2014 um 21:39)

  • Email versenden: Wie bekomme ich Umlaute richtig dargestellt?? Schau mal ob du hier fündig wirst!

  • Danke für Deine schnelle Antwort.

    Ich sende den Text nicht nur per Email sondern lasse ihn auch auf dem Bildschirm ausgeben und in eine Datei schreiben. Da hatte ich zuerst das gleiche Problem, konnte es aber mit dem Coding lösen. Dafür hatte ich die Quellen genutzt, die du auch gefunden hast.

    Aber ich komme nun bei dem Emailversand nicht weiter. Ich muss das in den Header der Email reingeben, soviel habe ich glaube schon verstanden. Ich hab in der Dokumention des Moduls schon set_charset gefunden, aber mir ist nicht klar wie das anzuwenden ist. Das Beispiel fehlt halt...

  • mal versucht, dass

    Code
    smtpserver.sendmail(Absender, [Empfaenger], msg.as_string())

    in das

    Code
    smtpserver.sendmail(Absender, [Empfaenger], msg.as_string("utf-8"))

    zu ändern?

    gefunden auf ... http://bytes.com/topic/python/a…-8-a#post665546


    EDIT: schau dir mal den code an...

    golfer76
    14. Januar 2014 um 22:49

    er hat noch mehrere imports drin, keine Ahnung für was die stehen, aber vielleicht fehlt dir ja einer.

    Ansonsten bin ich nun erst einmal schlafen, Gute Nacht und noch viel Erfolg.

    Einmal editiert, zuletzt von Denwo (20. Januar 2014 um 22:26)

    • Offizieller Beitrag

    Python und UTF_8 kann einen zur Verzweiflung treiben, das ist aber nicht nur die Schuld von Python. Warum kann nicht jedes BS und Programm einfach UTF8 als Standard Encoding nutzen aber nein wir müssen ja Latin1 bizw. ISO 8859-1 nutzen...
    Warum benutzt du Latin1 als encoding wenn du UTF8 willst? :denker:

    probier mal

    Code
    umlautstring=u"Text mit Umlauten ÖöÄäÜüß"
    msg['Subject'] = umlautstring.encode('UTF-8')

    Der Unterschied zwischen Genie und Wahnsinn definiert sich im Erfolg.

  • Danke für die Antwort!

    Zitat


    Python und UTF_8 kann einen zur Verzweiflung treiben, das ist aber nicht nur die Schuld von Python. Warum kann nicht jedes BS und Programm einfach UTF8 als Standard Encoding nutzen aber nein wir müssen ja Latin1 bizw. ISO 8859-1 nutzen...


    Da hast du absolut recht...:X
    Andererseits bin ich ganz froh einen Grund zu haben, mich damit zu beschäftigen. Läuft einem ja doch ab und an über'n Weg und so raff ich jetzt zumindest ein paar Grundlagen...


    Zitat


    Warum benutzt du Latin1 als encoding wenn du UTF8 willst? Denker


    Diese Frage raff ich jetzt nach bisschen Einarbeitung auch... :blush:


    Aber zum eigentlichen Problem:

    Code
    umlautstring=u"Text mit Umlauten ÖöÄäÜüß"
    msg['Subject'] = umlautstring.encode('UTF-8')


    funktioniert nicht, aber ohne Encoding funktioniert es!!! Also:

    Code
    umlautstring=u"Text mit Umlauten ÖöÄäÜüß"
    msg['Subject'] = umlautstring

    Was -soweit ich's nun verstanden habe-logisch ist...

    Der Textbody wird auch richtig dargestellt, da ich den jetzt natürlich auf UTF-8 eingestellt habe.
    Es funkt also alles!!!! Tausend Dank!!!!
    :danke_ATDE:


    Hier nochmal der relevante Codeausschnitt:

    Code
    umlautstring=u"Text mit Umlauten ÖöÄäÜüß"
    msg = MIMEText(umlautstring.encode("utf-8"), _charset="utf-8")
    msg['Subject'] = umlautstring
    msg['From'] = Absender
    msg['To'] = Empfaenger
    smtpserver.sendmail(Absender, [Empfaenger], msg.as_string("utf-8"))
    smtpserver.quit()


    Achso, in meinem Fall musste ich requests auch noch auf UTF-8 umstellen, das geht so:

    Code
    antwortvonrequests.encoding='UTF-8'

    Einmal editiert, zuletzt von johneff (21. Januar 2014 um 22:38)

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!