IMAP:cómo mover un mensaje de una carpeta a otra
-
02-07-2019 - |
Pregunta
(usando los comandos IMAP, no con la ayuda de ningún otro paquete de correo)
Solución
No estoy seguro de qué tan versado está en imap-speak, pero básicamente después de iniciar sesión, "SELECCIONE" el buzón de origen, "COPIE" los mensajes y "BORRAR" los mensajes (o "BORRAR" el buzón antiguo 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 único antes de cada comando, por lo tanto, "a b c" al frente)
Ver RFC 2060 para detalles.
Otros consejos
Hay varias formas de hacerlo.El mejor es el UID MOVE
comando 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 está indicada por el MOVE
capacidad.
Si no está disponible, pero UIDPLUS
(RFC 4315) es decir, la segunda mejor opción es utilizar 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 el UIDPLUS
falta, no hay nada razonable que puedas hacer - el EXPUNGE
El comando elimina permanentemente todos los mensajes que están marcados para su eliminación, incluidos aquellos que no ha tocado.Lo mejor es simplemente usar el 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()
Dónde msg_uid es el uid del correo.
Supongo que COPIAS el mensaje en la nueva carpeta y luego lo eliminas (BORRADO) en la anterior.
PISTA No hay ningún comando ELIMINAR que haga lo que usted quiere decir, debe marcar el mensaje como eliminado y luego BORRAR el buzón.Eche un vistazo al RFC.Tenga cuidado con DELETE, ya que elimina buzones completos, no correos individuales.