Python IMAPLIB Betreff Lesen

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
_Bamba_
User
Beiträge: 7
Registriert: Samstag 11. Februar 2017, 16:29

Hi,
bin noch ziemlich neu in Python und versuche gerade ein Programm zu scripten das Emails auswertet und mir eine Liste erstellt.
Und zwar habe ich leider das Problem das ich nicht rausfinde wie man statt nach einer EMail Adresse zu suchen die Betreffe durchsucht.

Code: Alles auswählen

def g_body(msg):
    if msg.is_multipart():
        return g_body(msg.get_payload(0))
    else:
        return msg.get_payload(None, True)

def search(key,value,con):
    result, data = con.search(None,key,'"{}"'.format(value))
    return data

def g_emails(result_bytes):
    msgs = []
    for num in result_bytes[0].split():
        typ, data = conne.fetch(num, '(RFC822)')
        msgs.append(data)
    return msgs

conne = imaplib.IMAP4_SSL(imap_url)
conne.login(user, password)			
conne.select('INBOX')

result, data = conne.fetch(b'1', '(RFC822)')
raw = email.message_from_bytes(data[0][1])

msgs = g_emails(search('FROM', 'mail', conne))  #bei 'mail' gesuchte email eingeben

for msg in msgs:
    print(g_body(email.message_from_bytes(msg[0][1])))
    
Das ist bisher mein Code vielleicht weis jemand von euch wie man bei der Search def nach dem Betreff suche und ihn anzeigen lassen kann.
Ich habe das ganze mir aus dem Internet zusammen gebaut und habe leider nicht ganz verstanden wofür das 'RFC822' bei einem .fetch ist.

Freue mich wenn mir jemand helfen kann und mir vielleicht auch erklären kann wofür die RFC822 ist.

Danke
Benutzeravatar
__blackjack__
User
Beiträge: 14042
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@_Bamba_: Da hätte man aber auch mal nach suchen können und wäre ziemlich schnell auf das RFC 822-Dokument gestossen: https://www.w3.org/Protocols/rfc822/

Und wenn man das was dort beschrieben wird, mit dem vergleicht was `fetch()` als `data` liefert wenn man nach '(RFC822)' fragt, sollte auffallen dass es sich um genau das in RFC 822 beschriebene Format handelt.

Und da sollte dann auch klar werden wie man den Betreff durchsucht wenn man weiss wie das entsprechende Feld im Kopf der Mail heisst.

Was man stattdessen oder zusätzlich noch angeben kann, wird im RFC für IMAP beschrieben. Welches RFC das ist, steht in der Dokumentation des `imaplib`-Moduls. Und man sollte das so ungefähr verstanden haben, denn `imaplib` ist eine recht dünne Schicht die dieses Protokoll implementiert.

Man sollte auch den ”type” auswerten, was bei den meisten Aufrufen sagt ob es ein Problem gab oder nicht. Dein Code macht nämlich immer einfach weiter als ob der Aufruf erfolgreich war, auch wenn er das gar nicht war.

Ich würde die `imapclient`-Bibliothek empfehlen, die etwas mehr/weiter vom IMAP-Protokoll abstrahiert und beim erstellen von zu sendenden Daten und parsen von Antworten hilft.
„A life is like a garden. Perfect moments can be had, but not preserved, except in memory. LLAP” — Leonard Nimoy's last tweet.
_Bamba_
User
Beiträge: 7
Registriert: Samstag 11. Februar 2017, 16:29

Ok, danke für die schnelle antwort.

Jetzt macht auch einiges Sinn :D
Antworten