Text aus GMX-eMail-Rohdaten

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
mdint
User
Beiträge: 1
Registriert: Freitag 20. Mai 2016, 20:44

Hallo zusammen,

nachdem meine ersten Versuche mit Python und den Modulen tkinter und poplib recht zügig Erfolg brachten, hänge ich seit einiger Zeit an einem Problem bei der Umwandlung von den "eMail-Rohdaten" in einen vernüftigen Text. Dazu muss ich sagen, dass ich blutiger Anfänger in der Programmierung mit Python bin. Unten mein Code, der mir die letzte Nachricht in einer Datei abspeichert und auch in einem Fenster ausgibt. Außerdem habe ich mir die nötigen Informationen (die ich später für mein Format zur Abspeicherung benötige) ebenfalls im Code zusammengesammelt.
Ich dachte die get_payload Funktion einbinden zu können (siehe auskommentierter Bereich unten), aber bekomme kein brauchbares Ergebnis.

(1.) Kann mir jemand helfen bzw. einen Tipp geben wo mein Fehler liegen könnte? (die Nachricht ist ein Text)

In weiteren Schritten möchte ich dann auch HTML und zusammengesetzte Nachrichten lesbar darstellen. Auch evtl. Anhänge möchte ich separat abspeichern können. ... aber Schritt für Schritt ...

Auch bekomme ich das Betreff mit teilweise Hieroglyphen angezeigt.

(2.) Kann mir jemand Hilfestellung zur Umwandlung in einen lesbaren Text geben?

Vielen Dank schon einmal im Voraus.


Maik

Code: Alles auswählen

#!/usr/bin/env python3

#Python 3.2.3 (default, Jun 18 2015, 21:46:42) 
#[GCC 4.6.3] on linux2

from tkinter import *
import poplib
#import email
#import codecs

server = poplib.POP3_SSL('pop.gmx.net')
server.user('Benutzer')
server.pass_('Passwort')

serverstatus = server.stat()
AnzahlMails = serverstatus[0]

header,message,octets = server.retr(AnzahlMails)

server.quit()

f = open('/home/maik/Öffentlich/Mail.dat', 'w')
s = str(message)
f.write(s)
f.close()

IndexFrom = str(message).find("b'From:")
IndexEndFrom = str(message).find("b'", IndexFrom+1)
From = str(str(message)[IndexFrom+2:IndexEndFrom-3])

IndexTo = str(message).find("b'To:")
IndexEndTo = str(message).find("b'", IndexTo+1)
To = str(str(message)[IndexTo+2:IndexEndTo-3])

IndexSubject = str(message).find("b'Subject:")
IndexEndSubject = str(message).find("b'", IndexSubject+1)
Subject = str(str(message)[IndexSubject+2:IndexEndSubject-3])

IndexContentType = str(message).find("b'Content-type:")
if IndexContentType == -1:
    IndexContentType = str(message).find("b'Content-Type:")    
IndexEndContentType = str(message).find("b'", IndexContentType+1)
ContentType = str(str(message)[IndexContentType+2:IndexEndContentType-3])

IndexDate = str(message).find("b'Date:")
IndexEndDate = str(message).find("b'", IndexDate+1)
Date = str(str(message)[IndexDate+2:IndexEndDate-3])

fenster = Tk()
fenster.title("Tool e-Mails auslesen")
fenster.geometry("500x300")

label1 = Label(fenster, text=From, anchor=W, justify=LEFT)
label1.place(x=20, y=20, width=500, height=20)

label2 = Label(fenster, text=To, anchor=W, justify=LEFT)
label2.place(x=20, y=40, width=500, height=20)

label3 = Label(fenster, text=Subject, anchor=W, justify=LEFT)
label3.place(x=20, y=60, width=500, height=20)

label4 = Label(fenster, text=Date, anchor=W, justify=LEFT)
label4.place(x=20, y=80, width=500, height=20)

label5 = Label(fenster, text=ContentType, anchor=W, justify=LEFT)
label5.place(x=20, y=100, width=500, height=20)

S = Scrollbar(fenster)
T = Text(fenster)
T.place(x=20, y=120, width=460, height=200) #50
S.pack(side=RIGHT, fill=Y)
#T.pack(side=LEFT, fill=Y)
S.config(command=T.yview)
T.config(yscrollcommand=S.set)

IndexMail = str(message).find("b''")
Mail = str(str(message)[IndexMail+2:])

#msg = email.message_from_string(str(message))
#message1 = msg.get_payload(decode=True)
#message1 = msg.get_payload()

quote = Mail

T.insert(END, quote)

fenster.mainloop()
[/size]
Sirius3
User
Beiträge: 17748
Registriert: Sonntag 21. Oktober 2012, 17:20

@mdint: Dein Programm braucht dringend ein paar Funktionen. Eigentlich sollte gar keine Code außer Importe, Konstanten und Definitionen auf oberster Ebene stehen. *-Importe haben in Programmen selten etwas verloren; Du kannst nicht kontrollieren, welche Namen Du da Importierst. Die String-Repräsentation einer Liste ist nicht dazu da, dass man mit ihr weiterarbeitet. Sie ist nur für Debug-Ausgaben gedacht, auch nicht zum Schreiben in eine Datei. Dann wäre das Auseinanderpflücken Deiner Nachrichten auch gar nicht nötig, viel einfacher und nicht so fehleranfällig und weniger hieroglyphisch. Variabelnamen sollten dem Leser sagen, für was sie gebraucht werden. Bei «T» und «S» ist das garantiert nicht der Fall.
Antworten