imap borrar mensajes

¿Cómo puedo borrar mensajes del buzón de correo? Estoy usando este código, pero las letras no se eliminan. Lo siento por mi ingles.

def getimap(self,server,port,login,password): import imaplib, email box = imaplib.IMAP4(server,port) box.login(login,password) box.select() box.expunge() typ, data = box.search(None, 'ALL') for num in data[0].split() : typ, data = box.fetch(num, '(UID BODY[TEXT])') print num print data[0][1] box.close() box.logout() 

Creo que deberías marcar los correos electrónicos a eliminar, primero … Por ejemplo:

 for num in data[0].split(): box.store(num, '+FLAGS', '\\Deleted') box.expunge() 

Este es el código de trabajo para eliminar todos los correos electrónicos en su bandeja de entrada:

 import imaplib box = imaplib.IMAP4_SSL('imap.mail.microsoftonline.com', 993) box.login("user@domain.com","paswword") box.select('Inbox') typ, data = box.search(None, 'ALL') for num in data[0].split(): box.store(num, '+FLAGS', '\\Deleted') box.expunge() box.close() box.logout() 

El siguiente código imprime algunos campos de encabezado de mensaje y luego borra el mensaje.

 import imaplib from email.parser import HeaderParser m = imaplib.IMAP4_SSL("your_imap_server") m.login("your_username","your_password") # get list of mailboxes list = m.list() # select which mail box to process m.select("Inbox") resp, data = m.uid('search',None, "ALL") # search and return Uids uids = data[0].split() mailparser = HeaderParser() for uid in uids: resp,data = m.uid('fetch',uid,"(BODY[HEADER])") msg = mailparser.parsestr(data[0][1]) print (msg['From'],msg['Date'],msg['Subject']) print m.uid('STORE',uid, '+FLAGS', '(\\Deleted)') print m.expunge() m.close() # close the mailbox m.logout() # logout 

Si está utilizando Gmail, el proceso es un poco diferente:

  1. Moverlo a la carpeta [Gmail] / Trash.
  2. Elimínelo de la carpeta [Gmail] / Papelera (agregar / eliminar marca)

Todos los correos electrónicos en [Gmail] / Spam y [Gmail] / Trash se eliminan después de 30 días. Si elimina un mensaje de [Gmail] / Spam o [Gmail] / Trash, se eliminará de forma permanente.

Recuerde también llamar a EXPUNGE después de configurar la etiqueta Eliminada.

Esto es lo que funciona para mí, y es muy rápido ya que no borro cada correo electrónico individualmente (almacenar) sino que en su lugar, paso el índice de la lista. Esto funciona tanto para gmail personal como para empresas (Google Apps for Business). Primero selecciona la carpeta / etiqueta para usar m.list () le mostrará todos los disponibles. A continuación, busca correos electrónicos con más de un año de antigüedad y realiza un movimiento a la papelera. A continuación, marca todos los correos electrónicos en la papelera con el indicador de eliminación y elimina todo:

 #!/bin/python import datetime import imaplib m = imaplib.IMAP4_SSL("imap.gmail.com") # server to connect to print "Connecting to mailbox..." m.login('gmail@your_gmail.com', 'your_password') print m.select('[Gmail]/All Mail') # required to perform search, m.list() for all lables, '[Gmail]/Sent Mail' before_date = (datetime.date.today() - datetime.timedelta(365)).strftime("%d-%b-%Y") # date string, 04-Jan-2013 typ, data = m.search(None, '(BEFORE {0})'.format(before_date)) # search pointer for msgs before before_date if data != ['']: # if not empty list means messages exist no_msgs = data[0].split()[-1] # last msg id in the list print "To be removed:\t", no_msgs, "messages found with date before", before_date m.store("1:{0}".format(no_msgs), '+X-GM-LABELS', '\\Trash') # move to trash print "Deleted {0} messages. Closing connection & logging out.".format(no_msgs) else: print "Nothing to remove." #This block empties trash, remove if you want to keep, Gmail auto purges trash after 30 days. print("Emptying Trash & Expunge...") m.select('[Gmail]/Trash') # select all trash m.store("1:*", '+FLAGS', '\\Deleted') #Flag all Trash as Deleted m.expunge() # not need if auto-expunge enabled print("Done. Closing connection & logging out.") m.close() m.logout() print "All Done."