Pregunta

(usando los comandos IMAP, no con la ayuda de ningún otro paquete de correo)

¿Fue útil?

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.

RFC3501

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top