IMAP: wie eine Nachricht von einem Ordner in einen anderen verschieben
-
02-07-2019 - |
Frage
(unter Verwendung der IMAP-Befehle, nicht mit Hilfe eines anderen Mail-Paket)
Lösung
Ich bin nicht sicher, wie gut versiert Sie sind in imap-sprechen, aber im Grunde nach dem Login „SELECT“ das Quellpostfach, „COPY“ die Nachrichten, und „EXPUNGE“ die Nachrichten (oder „DELETE“ die alten Mailbox, wenn es leer ist jetzt: -).
a login a s
b select source
c copy 1 othermbox
d store 1 +flags (\Deleted)
e expunge
wäre ein Beispiel für Nachrichten zu senden. ( Hinweis : IMAP-Nachrichten erfordern einen uniqe Präfix vor jedem Befehl, damit die "a b c" vor)
Siehe RFC 2060 .
Andere Tipps
Es gibt mehrere Möglichkeiten, das zu tun. Das beste ist der UID MOVE
Befehl definiert in RFC 6851 von Anfang 2013:
C: a UID MOVE 42:69 foo
S: * OK [COPYUID 432432 42:69 1202:1229]
S: * 22 EXPUNGE
S: (more expunges)
S: a OK Done
Präsenz dieser Erweiterung wird durch die MOVE
Fähigkeit angegeben.
Wenn es nicht verfügbar ist, aber UIDPLUS
( RFC 4315 ) ist die zweitbeste Option ist die verwenden Kombination von UID STORE
, UID COPY
und UID EXPUNGE
:
C: a01 UID COPY 42:69 foo
S: a01 OK [COPYUID 432432 42:69 1202:1229] Copied
C: a02 UID STORE 42:69 +FLAGS.SILENT (\Deleted)
S: a02 OK Stored
C: a03 UID EXPUNGE 42:69
S: * 10 EXPUNGE
S: * 10 EXPUNGE
S: * 10 EXPUNGE
S: a03 Expunged
Wenn der UIDPLUS
fehlt, gibt es nichts vernünftig, dass Sie tun können - der EXPUNGE
Befehl löscht dauerhaft alle Nachrichten, die zum Löschen markiert sind, einschließlich diejenigen, die Sie nicht berührt haben. Das Beste ist dies nur den UID COPY
zu verwenden und UID STORE
in diesem Fall.
Wenn Sie die uid der E-Mail, die bewegt werden würde.
import imaplib
obj = imaplib.IMAP4_SSL('imap.gmail.com', 993)
obj.login('username', 'password')
obj.select(src_folder_name)
apply_lbl_msg = obj.uid('COPY', msg_uid, desti_folder_name)
if apply_lbl_msg[0] == 'OK':
mov, data = obj.uid('STORE', msg_uid , '+FLAGS', '(\Deleted)')
obj.expunge()
Wo msg_uid ist die Benutzer-ID des Mail.
Ich denke, Sie die Nachricht in die neuen Ordner kopieren und dann löschen (EXPUNGE) es in dem alten.
HINWEIS Es gibt keine DELETE-Befehl, das tut, was Sie meinen, Sie die Nachricht Flagge haben als gelöscht und dann die Mailbox EXPUNGE. Werfen Sie einen Blick auf die RFC. Seien Sie vorsichtig mit DELETE, da es ganze Postfächer löscht, nicht einzelne Mails.