Seite 1 von 1

"Sent Item" mit imaplib funktioniert nicht

Verfasst: Montag 18. April 2016, 12:54
von El Cattivo
Hallo Zusammen!
ich benötige ein Script, welche mir alle E-Mails in einem Bestimmten imap-Ordner auf ungelesen setzt.
folgendes Zeilen habe ich mir zusammen getippt:

Code: Alles auswählen

import imaplib

im = imaplib.IMAP4_SSL("imap.provider.de") 
im.login("el_cattivo@provider.de", "123456")
im.select("INBOX", readonly=False)
typ, data = im.search(None, 'ALL')
for num in data[0].split():
   im.store(num, '-FLAGS', '\\seen')
im.expunge()
im.close()
im.logout()
Das funktioniert auch soweit ganz gut.Auch mit anderen Ordner funktioniert es ("Drafts","Notes")
Aber beim Ordner "Sent Items" funktioniert es nicht.
Ich denke das das Problem das Leerzeichen ist.Habe aber keine Ahnung wie ich es anders Schreiben soll.
Was muss ich ändern damit es auch mit "Sent Items funktioniert?

MfG El Cattivo

Re: "Sent Item" mit imaplib funktioniert nicht

Verfasst: Montag 18. April 2016, 13:42
von BlackJack
@El Cattivo: Was heisst „funktioniert nicht“? Bekommst Du eine Fehlermeldung? Falls ja, welche und mit welchen Code genau. Werden bei der Suche auch tatsächlich Nachrichten gefunden? Wie sehen die Rückgabewerte vom `store()` aus? Wie überprüfst Du das Flag hinterher?

Re: "Sent Item" mit imaplib funktioniert nicht

Verfasst: Dienstag 19. April 2016, 06:51
von El Cattivo
Hallo,
erstmal vielen Dank für deine schnelle Antwort.
Ob die Flags gesetzt werden oder nicht habe ich einfach mit meinem E-Mail Programm überprüft.
Wie gesagt mit dem code aus Post 1 werden alle E-Mails in der in Box auf ungelsen gesetzt (geprüft von Hand mit E-Mail Programm).
Wenn ich den Code wie folgt abändere:

Code: Alles auswählen

import imaplib

im = imaplib.IMAP4_SSL("imap.provider.de")
im.login("el_cattivo@provider.de", "123456")
im.select("Sent Items", readonly=False)
typ, data = im.search(None, 'ALL')
for num in data[0].split():
   im.store(num, '-FLAGS', '\\seen')
im.expunge()
im.close()
im.logout()
bekomme ich folgende Fehlermeldung:

Code: Alles auswählen

Traceback (most recent call last):
  File "C:\Users\El_Cattivo\AppData\Local\Programs\Python\Python35-32\mail.py", line 7, in <module>
    typ, data = im.search(None, 'ALL')
  File "C:\Users\El_Cattivo\AppData\Local\Programs\Python\Python35-32\lib\imaplib.py", line 707, in search
    typ, dat = self._simple_command(name, *criteria)
  File "C:\Users\El_Cattivo\AppData\Local\Programs\Python\Python35-32\lib\imaplib.py", line 1180, in _simple_command
    return self._command_complete(name, self._command(name, *args))
  File "C:\Users\El_Cattivo\AppData\Local\Programs\Python\Python35-32\lib\imaplib.py", line 928, in _command
    ', '.join(Commands[name])))
imaplib.IMAP4.error: command SEARCH illegal in state AUTH, only allowed in states SELECTED
Den Ordner "Sent Items" gibt es aber Wenn ich mir die Rückgabewerte von list() ausgeben lasse:

Code: Alles auswählen

('OK', [b'(\\Archive \\HasNoChildren) "." "Archive"', b'(\\Drafts \\HasNoChildren) "." "Drafts"', b'(\\HasNoChildren) "." "Gel&APY-schte Elemente"', b'(\\HasNoChildren) "." "INBOX"', b'(\\HasNoChildren) "." "Junk-E-Mail"', b'(\\HasNoChildren) "." "Notes"', b'(\\Sent \\HasNoChildren) "." "Sent Items"', b'(\\Junk \\HasNoChildren) "." "Spam"', b'(\\Trash \\HasNoChildren) "." "Trash"'])

Re: "Sent Item" mit imaplib funktioniert nicht

Verfasst: Dienstag 19. April 2016, 09:42
von BlackJack
@El Cattivo: Die Ausnahme behauptet ja auch nicht dass es den Ordner nicht gibt, sondern das sich der Status der Verbindung noch in AUTH befindet und nicht in SELECTED. Was eigenartig ist. Also am Leerzeichen kann es nicht eigentlich nicht liegen, das habe ich eben selbst mal ausprobiert.

Re: "Sent Item" mit imaplib funktioniert nicht

Verfasst: Dienstag 19. April 2016, 09:44
von BlackJack
Wie sieht denn der Rückgabewert von dem `select()`-Aufruf aus?

Re: "Sent Item" mit imaplib funktioniert nicht

Verfasst: Dienstag 19. April 2016, 10:23
von El Cattivo
der Rückgabewert sieht wie folgt aus für "Sent Items":

Code: Alles auswählen

('NO', [b'[TRYCREATE] Mailbox does not exist'])
der Rückgabewert sieht wie folgt aus für "INBOX":

Code: Alles auswählen

('OK', [b'42'])

Re: "Sent Items" mit imaplib funktioniert nicht

Verfasst: Mittwoch 27. April 2016, 14:38
von El Cattivo
Ich habe noch etwas herumgespielt und habe gemerkt das es mit Python 2.7 funktioniert und mit 3.5 nicht.
folgenden Code habe ich verwendet:

Code: Alles auswählen

import imaplib

im = imaplib.IMAP4_SSL("imap.provider.de") 
im.login("el_cattivo@provider.de", "123456")
mailbox='Sent Items'
test= im.select(mailbox, readonly=False)
print(test)
im.logout()
Der Rückgabewert mit Python 2.7 ist:

Code: Alles auswählen

('OK', ['3'])
und mit Python 3.5 ist der Rückgabewert:

Code: Alles auswählen

('NO', ['[TRYCREATE] Mailbox does not exist'])
Kann mir das jemand erklären?