Wie erkenne ich das Ende eines EMail-Textes??

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
pascalsv
User
Beiträge: 16
Registriert: Samstag 7. Januar 2006, 15:45

Hallo zusammen,

ich habe mit einem Parser die Bestandteile einer Mail zerpflückt und feststellen müssen, dass die "message" an sich aus einem Haufen von Steuercodes besteht und auch der eigentliche "Text" in mehreren Strings enthalten ist. Scheinbar für jede Zeile bis zum CR einen??

Wie kann ich nun erkennen, aus wie vielen Message.Strings die Meldung besteht?

Bei meiner Testmail besteht die "Message" z.B. unter anderem aus folgenden Elementen:
[8] = Antwortadresse
[9] = Absender
[11] = Betreff
[32....] = Text

Danke & Gruß,

Pascal
Life is short - don't buy green bananas...
mitsuhiko
User
Beiträge: 1790
Registriert: Donnerstag 28. Oktober 2004, 16:33
Wohnort: Graz, Steiermark - Österreich
Kontaktdaten:

import email :-)
TUFKAB – the user formerly known as blackbird
rogen
User
Beiträge: 85
Registriert: Dienstag 29. März 2005, 17:45
Wohnort: neustift
Kontaktdaten:

vielleicht hilft das das .

Code: Alles auswählen


import  poplib , base64, os , time,email, string,StringIO, rfc822,re,thread
import urllib2,htmllib,formatter
from email.Message import Message

------

    def frager(self):
        self.mails = []
        M = poplib.POP3(host)
        M.user(benutzer)
        M.pass_(passw)
        
        if len(M.list()[1]) <> 0:
            print "-------"
            #print M.list()[1]
            for mailanzahl in range(len(M.list()[1])):
                header,mes,obje = M.retr(mailanzahl+1)

                #print mes
                text = string.join(mes, "\n")
                m = email.message_from_string(text)
                typen = m.items()
                
                adresse= ""
                betreff = ""
                for a in range(len(typen)):
                   
                    if typen[a][0] == "From":
                            adresse=typen[a][1]
                for a in range(len(typen)):
                    if typen[a][0] == "Subject":
                            betreff=str(typen[a][1]).decode("quopri_codec")
                            style = re.findall("""\=\?(.+?)\?Q\?.*""", str(betreff))
                            
                            if style <> []:
                                betreff=betreff.replace(str(style[0]),"")
                                betreff=betreff.replace("=?","")
                                betreff=betreff.replace("?Q?","")
                                betreff=betreff[:-1]
                            
                            
                            
                #adresse = typen[0][0]
                
                
                anhang = []
                                   
                                
                for part in m.walk():
                    if part.get_content_maintype() == "text" :
                        
                        inhalt = part.get_payload()
                        inhalt = inhalt.decode("quopri_codec")
                        inhalt= htmlparser(inhalt)
                        
                        
                        
                        
                        
                        
                    
                    if part.get_content_maintype() == 'multipart':
                        continue
                    if  part.get_filename() <> None:
                        
                        anhang.append([part.get_filename(),part.get_payload(decode=1)])
                
                self.mails.append([mailanzahl+1,adresse,betreff,inhalt,anhang])
        M.quit()

pascalsv
User
Beiträge: 16
Registriert: Samstag 7. Januar 2006, 15:45

@rogen: das war schon mal sehr hilfreich, vielen Dank!!

Was mir jetzt noch fehlt ist eine Umwandlung der Zeitangabe in ein "schlankes" Datumsformat.

Bsp.:

Sat, 7 Jan 2006 18:53:23 +0100 ----> 07.01.2006

Wie kann ich soetwas erreichen? Habe schon gegooglet, aber leider erfolglos...

Danke,

Pascal
Life is short - don't buy green bananas...
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

pascalsv hat geschrieben:Was mir jetzt noch fehlt ist eine Umwandlung der Zeitangabe in ein "schlankes" Datumsformat.

Bsp.:
Sat, 7 Jan 2006 18:53:23 +0100 ----> 07.01.2006
Hi Pascal!

Code: Alles auswählen

import time
s = "Sat, 7 Jan 2006 18:53:23 +0100".split()
d = time.strptime("%s %s %s" % (s[1], s[2], s[3]), "%d %b %Y")
print time.strftime("%d.%m.%Y", d)
mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
pascalsv
User
Beiträge: 16
Registriert: Samstag 7. Januar 2006, 15:45

:shock: :? :( :roll: :oops:

*AUFDIESTIRNKLATSCH*

Mensch..... Mitten in der Nacht sollte man nicht meinen, Programmieren zu können..... :wink:

Danke Gerold!!!

Ach so, und "MOIN!!!"

Pascal :lol:
Life is short - don't buy green bananas...
ChrisSek
User
Beiträge: 10
Registriert: Samstag 8. Mai 2004, 13:06
Wohnort: Bremen
Kontaktdaten:

rogen hat geschrieben:

Code: Alles auswählen

                           betreff=str(typen[a][1]).decode("quopri_codec")
                            style = re.findall("""\=\?(.+?)\?Q\?.*""", str(betreff))
                            
                            if style <> []:
                                betreff=betreff.replace(str(style[0]),"")
                                betreff=betreff.replace("=?","")
                                betreff=betreff.replace("?Q?","")
                                betreff=betreff[:-1]
Bin grad auf der Suche nach ner Möglichkeit gewesen, die Betreffzeile einer Mail vernünftig darzustellen.

Tausend Dank rogen! Klappt super mit dem Code.

Grüße
Chris
Antworten