¿Cómo descargo solo los archivos adjuntos no leídos de una etiqueta específica de gmail?

Tengo una secuencia de comandos de Python adaptada de la descarga de correos electrónicos MMS enviados a Gmail mediante Python

import email, getpass, imaplib, os detach_dir = '.' # directory where to save attachments (default: current) user = raw_input("Enter your GMail username:") pwd = getpass.getpass("Enter your password: ") # connecting to the gmail imap server m = imaplib.IMAP4_SSL("imap.gmail.com") m.login(user,pwd) m.select("[Gmail]/All Mail") # here you a can choose a mail box like INBOX instead # use m.list() to get all the mailboxes resp, items = m.search(None, 'FROM', '"Impact Stats Script"') # you could filter using the IMAP rules here (check http://www.example-code.com/csharp/imap-search-critera.asp) items = items[0].split() # getting the mails id for emailid in items: resp, data = m.fetch(emailid, "(RFC822)") # fetching the mail, "`(RFC822)`" means "get the whole stuff", but you can ask for headers only, etc email_body = data[0][1] # getting the mail content mail = email.message_from_string(email_body) # parsing the mail content to get a mail object #Check if any attachments at all if mail.get_content_maintype() != 'multipart': continue print "["+mail["From"]+"] :" + mail["Subject"] # we use walk to create a generator so we can iterate on the parts and forget about the recursive headach for part in mail.walk(): # multipart are just containers, so we skip them if part.get_content_maintype() == 'multipart': continue # is this part an attachment ? if part.get('Content-Disposition') is None: continue filename = part.get_filename() counter = 1 # if there is no filename, we create one with a counter to avoid duplicates if not filename: filename = 'part-%03d%s' % (counter, 'bin') counter += 1 att_path = os.path.join(detach_dir, filename) #Check if its already there if not os.path.isfile(att_path) : # finally write the stuff fp = open(att_path, 'wb') fp.write(part.get_payload(decode=True)) fp.close() 

Estoy filtrando los mensajes por asunto y obteniendo los archivos adjuntos, pero ahora solo necesito obtener los archivos adjuntos de los nuevos correos electrónicos. ¿Puedo modificar el m.search() alguna manera para devolver solo los correos electrónicos no leídos?

Intenta modificar esta línea:

 resp, items = m.search(None, 'FROM', '"Impact Stats Script"') 

a:

 resp, items = m.search(None, 'UNSEEN', 'FROM', '"Impact Stats Script"') 

La documentación de imaplib Python muestra solo agregar más criterios de búsqueda , y la especificación IMAP define los criterios de búsqueda UNSEEN :

  UNSEEN Messages that do not have the \Seen flag set.