Python imaplib Betreff/Text Suche

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
py4fun
User
Beiträge: 16
Registriert: Donnerstag 3. Januar 2013, 20:07

Hallo,
diesmal habe ich mal eine Frage zur IMAP libary (imaplib).
Ich habe ein kleines Script verfasst, in welchem ich den Posteingang nach Mails von einer bestimmten Adresse mit einem bestimmten Betreff und einem bestimmten Text durchsuche.
Dazu kenn ich die Funktion .search unter imaplib.
Das funktioniert auch an sich gut, doch wenn man nach dem Betreff "Beispiel1" sucht und dem Text "Beispiel2" such, dann werden nicht nur Treffer gefunden, welche den Betreff "Beispiel1" und den Text "Beispiel2" haben, sondern auch welche, welche "Beispiel1" im Betreff haben und/oder "Beispiel2" im Text haben. Das bedeutet es werden auch Treffer angezeigt, welche beispielsweise "xBesipiel1" als Betreff haben.
Kann man das irgendwie verhindern oder gibt es eventuell eine andere Funktion unter imaplib zum 'spezifischen' suchen?

Danke schonmal :)
friedduck
User
Beiträge: 76
Registriert: Montag 23. Juli 2012, 20:41

Hi,
ich denke wenn du es präziser haben willst, wirst du es wohl ohne re ( regular expression ) modul nicht schaffen.

Vll. eine schleife machen die alle Emails durchläuft und den Betreff durchsucht, denke aber daran das die Betreff information mit base64
kodiert sein kann.

Die funktion ist sehr hilfreich: email.Header.decode_header()

Code: Alles auswählen

Decode a message header value without converting the character set. The header value is in header.

This function returns a list of (decoded_string, charset) pairs containing each of the decoded parts of the header. charset is None for non-encoded parts of the header, otherwise a lower case string containing the name of the character set specified in the encoded string.
py4fun
User
Beiträge: 16
Registriert: Donnerstag 3. Januar 2013, 20:07

Schonmal vielen Danke für die schnelle Antowrt :)
Die Idee hatte ich auch schon (zumindest ansatzweise).
Das einzige, was mich zum zögern gebracht hat war, dass ich so jede einzelne Mail öffnen muss (natülich in einer Schleife!), den Header auslesen muss, auswerten muss...
Dabei wird jede dieser Mail als gelesen markiert (oder nicht?) und das sah ich als Problem, da das Script für den Benutzer nicht bemerkbar sein soll, es sei denn es kommt eine bestimmte Mail (von einer bestimmten Adresse, mit einem bestimmten Betreff/Text) an. So müsste man dann jede Mail wieder als ungelesen markieren. Das finde ich sehr unschön, aber falls es keine andere Lösung gibt, muss ich wohl darauf zurückgreifen.
Oder verstehe ich deinen Lösungsansatz falsch?

Gruß py4fun
friedduck
User
Beiträge: 76
Registriert: Montag 23. Juli 2012, 20:41

Dabei wird jede dieser Mail als gelesen markiert (oder nicht?)
Ja, da ist so. Habs grade ausprobiert. Dann weiß ich auch nicht. Evtl. kann man den status der Email vorher auslesen und danach zurücksetzen.
BlackJack

@py4fun: Du kannst den Ordner auch „read-only” verwenden, dann werden die Mails nicht als gelesen markiert.
friedduck
User
Beiträge: 76
Registriert: Montag 23. Juli 2012, 20:41

Hallo Blackjack,

meinst du das?

Code: Alles auswählen

IMAP4.select([mailbox[, readonly]])

Select a mailbox. Returned data is the count of messages in mailbox (EXISTS response). The default mailbox is 'INBOX'. If the readonly flag is set, modifications to the mailbox are not allowed.
Man, was du alles weißt...
Die Info ist sehr nützlich gewesen.
py4fun
User
Beiträge: 16
Registriert: Donnerstag 3. Januar 2013, 20:07

@BlackJack:
Danke! sehr, sehr hilfreich :D

Vielen Dank für die Antworten!
Antworten