Saltar al contenido

Mover un correo electrónico en GMail con Python e imaplib

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 = '', readonly = False)
    resp, items = imap.search(None, 'All')
    email_ids  = items[0].split()
    latest_email_id = email_ids[-1] # Assuming that you are moving the latest email.

    resp, data = imap.fetch(latest_email_id, "(UID)")
    msg_uid = parse_uid(data[0])

    result = imap.uid('COPY', msg_uid, '')

    if result[0] == 'OK':
        mov, data = imap.uid('STORE', msg_uid , '+FLAGS', '(Deleted)')
        imap.expunge()

    disconnect(imap)

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.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *