remitente - IMAP: cómo mover un mensaje de una carpeta a otra
crear reglas en hotmail (4)
(utilizando los comandos IMAP, no con la ayuda de ningún otro paquete de correo)
No estoy seguro de cuán versado eres en términos improvisados, pero básicamente después de iniciar sesión, "SELECCIONA" el buzón de origen, "COPIA" los mensajes y "EXPUNGE" los mensajes (o "ELIMINA" el buzón anterior si está vacío ahora :-).
a login a s
b select source
c copy 1 othermbox
d store 1 +flags (/Deleted)
e expunge
sería un ejemplo de mensajes para enviar. ( Nota : los mensajes imap requieren un prefijo uniqe antes de cada comando, por lo tanto, el "abc" al frente)
Ver RFC 2060 para más detalles.
Supongo que COPIAS el mensaje a la nueva carpeta y luego lo borras (EXPUNGE) en el anterior.
SUGERENCIA No hay un comando DELETE que haga lo que usted quiere decir, debe marcar el mensaje como eliminado y luego EXPINGAR el buzón. Eche un vistazo al RFC. Tenga cuidado con DELETE, ya que borra los buzones enteros, no solo los correos.
Hay múltiples formas de hacer eso. El mejor es el comando UID MOVE
definido en RFC 6851 desde principios de 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
La presencia de esta extensión se indica mediante la capacidad de MOVE
.
Si no está disponible, pero es UIDPLUS
( RFC 4315 ), la segunda mejor opción es usar la combinación de UID STORE
, UID COPY
y 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
Si falta el UIDPLUS
, no hay nada razonable que pueda hacer: el comando EXPUNGE
elimina permanentemente todos los mensajes marcados para su eliminación, incluidos los que no ha tocado. Lo mejor es usar UID COPY
y UID STORE
en ese caso.
Si tiene el uid del correo electrónico que se va a mover.
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()
Donde msg_uid es el uid del correo.