Contamos con la mejor solución que descubrimos en todo internet. Nosotros deseamos que te resulte útil y si puedes aportar alguna mejora siéntete libre de hacerlo..
Solución:
No hay un comando de movimiento explícito para IMAP. Tendrás que ejecutar un COPY
seguido de un STORE
(con una bandera adecuada para indicar la eliminación) y finalmente expunge
. El ejemplo dado a continuación funcionó para mover mensajes de una etiqueta a otra. Sin embargo, probablemente querrá agregar más verificación de errores.
import imaplib, getpass, re
pattern_uid = re.compile('d+ (UID (?Pd+))')
def connect(email):
imap = imaplib.IMAP4_SSL("imap.gmail.com")
password = getpass.getpass("Enter your password: ")
imap.login(email, password)
return imap
def disconnect(imap):
imap.logout()
def parse_uid(data):
match = pattern_uid.match(data)
return match.group('uid')
if __name__ == '__main__':
imap = connect('')
imap.select(mailbox = '
En cuanto a Gmail, según su API que trabaja con etiquetas, lo único que debe hacer es agregar la etiqueta dest y eliminar la etiqueta src:
import imaplib
obj = imaplib.IMAP4_SSL('imap.gmail.com', 993)
obj.login('username', 'password')
obj.select(src_folder_name)
typ, data = obj.uid('STORE', msg_uid, '+X-GM-LABELS', desti_folder_name)
typ, data = obj.uid('STORE', msg_uid, '-X-GM-LABELS', src_folder_name)
Supongo que uno tiene un 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()
Comentarios y puntuaciones
Puedes confirmar nuestra faena dejando un comentario o puntuándolo te estamos agradecidos.