Umlautproblem bei eMail

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
andi24
User
Beiträge: 56
Registriert: Freitag 5. März 2010, 11:42

Hallo zusammen,

ich versuche gerade über python eine eMail mit Anhang zu versenden und habe dafür das Beispiel auf dieser http://snippets.dzone.com/posts/show/757 ausprobiert:

Code: Alles auswählen

def sendMail(to, subject, files=[],server="localhost"):
        assert type(to)==list
        assert type(files)==list
        from = "Hans Meier <hans@meier.de>"

        msg = MIMEMultipart()
        msg['From'] = from
        msg['To'] = COMMASPACE.join(to)
        msg['Date'] = formatdate(localtime=True)
        msg['Subject'] = subject

        text="Bla bla ä ö ü ß"

        msg.attach( MIMEText(text))


        for file in files:
                part = MIMEBase('application', "octet-stream")
                part.set_payload( open(file,"rb").read() )
                Encoders.encode_base64(part)
                part.add_header('Content-Disposition', 'attachment; filename="%s"'
                        % os.path.basename(file))
                msg.attach(part)

        smtp = smtplib.SMTP(server)
        smtp.sendmail(fro, to, msg.as_string() )
        smtp.close()

Soweit klappt auch alles super, nur werden sämtliche Umlaute als ?? dargestellt ... hat jemand eine Ahnung, woran das liegt?

Vielen Dank für jede Hilfe!

Andi
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Welche Kodierung verwendet denn Dein Script? Und welche Kodierung verwendet Dein Mail-Client? Hast Du Dir die Mail mal in einem Texteditor unter Benutzung derselben Kodierung wie im Script angeguckt?
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
andi24
User
Beiträge: 56
Registriert: Freitag 5. März 2010, 11:42

Hallo Hyperion,
Hyperion hat geschrieben:Welche Kodierung verwendet denn Dein Script? Und welche Kodierung verwendet Dein Mail-Client? Hast Du Dir die Mail mal in einem Texteditor unter Benutzung derselben Kodierung wie im Script angeguckt?
mhmm...mein Problem ist schonmal, dass ich garnicht weiß, welche Kodierung das Script hat. Das hab ich ja nirgends angegeben. Die Datei selbst ist als utf-8 Datei abgespeichert. Ich hab jetzt mal zum Test versucht sie als latin1 zu speichern (durch Angabe im Texteditor), das hat aber auch nichts geändert :-(
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

andi24 hat geschrieben: mhmm...mein Problem ist schonmal, dass ich garnicht weiß, welche Kodierung das Script hat. Das hab ich ja nirgends angegeben.
Das solltest Du vielleicht mal tun ;-) Ansonsten ist ja nicht klar, wie Python die Literale intern behandelt.
andi24 hat geschrieben: Die Datei selbst ist als utf-8 Datei abgespeichert. Ich hab jetzt mal zum Test versucht sie als latin1 zu speichern (durch Angabe im Texteditor), das hat aber auch nichts geändert :-(
Welche Datei?
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
andi24
User
Beiträge: 56
Registriert: Freitag 5. März 2010, 11:42

Mit der Datei habe ich das Python-Script gemeint :-) Das ist im Texteditor als utf-8 abgespeichert..

Die Kodierung würde ich gerne angeben, aber ich weiß leider nicht wie :-(
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Erster Treffer bei "python encoding": http://www.python.org/dev/peps/pep-0263/
andi24
User
Beiträge: 56
Registriert: Freitag 5. März 2010, 11:42

Hallo cofi,
cofi hat geschrieben:Erster Treffer bei "python encoding": http://www.python.org/dev/peps/pep-0263/
sorry, da haben wir uns falsch verstanden: Das Encoding für das Script (das man in der zweiten Zeile im Quellcode angibt - siehe Dein Link) hab ich natürlich schon als utf-8 angegeben. Die Datei selbst ist im Editor dann auch als utf-8 abgespeichert.

Ich dachte nur, ich muss an einer weiteren Stelle noch eine Kodierung angeben (siehe Beitrag von Hyperion: "Welche Kodierung verwendet denn Dein Script? Und welche Kodierung verwendet Dein Mail-Client? Hast Du Dir die Mail mal in einem Texteditor unter Benutzung derselben Kodierung wie im Script angeguckt?")
BlackJack

Man wird irgendwo bei der Mail noch angeben müssen wie der Text der da drin steckt eigentlich kodiert ist.
deets

@andi24

Ein paar Anmerkungen:

- deine list-asserts sind un-pythonisch. Dein Code wird nicht mehr funktionieren, wenn ich zB eine Menge statt Liste reingebe - obwohl beide iterierbar sind
- dein textkoerper ist ein byte-string, wenn du mit python 2.x unterwegs bist. Wenn ja, dann kann der in beliebigem encoding vorliegen. Besser waere denke ich ein unicode-literal, und explizit zu encodieren, bzw. die library das machen zu lassen.
- ich verwende fuer alle mail-belange TurboMail 3.0, das hat sich als simpel, robust & leicht erweiterbar erwiesen. Und loest eine Menge der dreckigen Details von MimeMessages - da kann ich zB mit purem unicode arbeiten, und sowas wie utf-8 und base64 und quoted printable encodierungen fuer dieses und jenes habe ich keinen brass mit

Nachtrag: BlackJack hat gerade noch nen richtigen hinweis gegeben, mein Punkt zwei ist also eher irrelevant - aber TurboMail bleibt ;)
Antworten