2010-07-05 27 views
11

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

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() 

Respuesta

13

creo que debe marcar los mensajes de correo electrónico que desea borrar, primero .. Por ejemplo:

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

Si está utilizando GMail el proceso es un poco diferente:

  1. Moverlo a la carpeta [Gmail]/Papelera.
  2. eliminarlo de la carpeta [Gmail]/Papelera (Agrega \ Borrar bandera)

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

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

10

Este es el código de trabajo para borrar todos los mensajes de correo electrónico en su bandeja de entrada:

import imaplib 
box = imaplib.IMAP4_SSL('imap.mail.microsoftonline.com', 993) 
box.login("[email protected]","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() 
5

El siguiente código imprime algunos campos del encabezado del mensaje y luego borrar 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 
1

Esto es lo que funciona para mí, y es muy rápido, ya que no elimino cada correo electrónico individual (tienda), pero paso el índice de la lista en su lugar. Esto funciona tanto para Gmail personal como para la empresa (Google Apps for Business). Primero selecciona la carpeta/etiqueta para usar m.list() le mostrará todos los disponibles. Luego busca correos electrónicos de más de un año de antigüedad y realiza un movimiento a la papelera. A continuación, las banderas de todos los correos electrónicos en la basura con el indicador de eliminación y expunges todo:

#!/bin/python 

import datetime 
import imaplib 

m = imaplib.IMAP4_SSL("imap.gmail.com") # server to connect to 
print "Connecting to mailbox..." 
m.login('[email protected]_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."