Hallo zusammen,
ich habe ein ähnliches Problem.
Ich greife mit Python auf eine Unicode Datenbank zu und schreibe dort gewisse Daten in eine Textdatei. Soweit so gut. Da sind halt auch Benennungen bei mit Umlauten, "Ö" zum Beispiel, aber alles wird richtig angezeigt.
Wenn ich jetzt allerdings die Datei per Python automatisiert als Anhang einer E-Mail verschicken will, bekomm ich den UnicodeEncodeError.
Das Problem ist auch, dass die Datei eigentlich wieder als Nicht-Unicode Datei umgewandelt werden muss, also iso-8859-1. Aber momentan ist es egal, wie rum ich decodiere/encodiere, entweder kommt die Meldung
'ascii' codec can't encode character u'\xd6' oder
'utf8' codec can't decode byte 0xd6.
Das "Ö" macht halt irgendwie Probleme. Hat einer von euch da noch eine Idee? Wäre echt dringend und weiß echt nicht mehr weiter. Per mailx oder so kann ich die Datei problemlos versenden. Die html-Vorlage ist auch als utf-8 codiert.
Hier noch ein paar Auszüge vom Quelltext.
Wenn ich die Datei schreibe, öffne ich sie mit io.open und gebe den Encoding-Parameter mit.
Code: Alles auswählen
file = path + "/ordner/datei.txt"
fkt_msg.send("template",[file],["email@bla.de"])
Code: Alles auswählen
def getbody(vorlage,daten,empf):
#Die Template-Datei wird rangeholt
datei = io.open(.. "mail_templates" + os.sep +vorlage+".html", encoding='utf-8')
if vorlage == "template":
subject = " Uebergabedatei"
attachment = daten[0]
body = datei.read()
return body,empfaenger,subject,[attachment]
Und dann will ich einfach nur die Mail versenden..
Code: Alles auswählen
def send(vorlage, daten=[],empf=[]):
Msg = mail.Message()
Msg.Subject(subject)
Msg.From(absender)
for e in empfaenger:
Msg.To(e)
Msg.body(body, mimetype="text/html")
if attachment[0] != "":
for a in attachment:
Msg.attach(a)
Msg.send()
Sobald ich halt die Zuweisung "attachment=daten[0]" mache, kommt dann halt eben der Fehler.