2010-08-27 12 views
5

Los ejemplos que he visto sobre la carga de correos electrónicos a través de IMAP usando python hacen una búsqueda y luego, para cada ID de mensaje en los resultados, realizo una consulta. Quiero acelerar las cosas al ir a buscarlos todos a la vez.Obteniendo múltiples mensajes IMAP a la vez

+4

Deseo realizar una búsqueda y luego obtener todos los mensajes resultantes en una sola operación. A menos que alguien agregue una nueva ley de física cuando no estaba prestando atención, creo que estaré bien. –

Respuesta

12

RFC 3501 dice que fetch toma un conjunto de secuencias, pero no vi una definición para eso y el ejemplo usa una forma de rango (2: 4 = mensajes 2, 3 y 4). Descubrí que una lista de identificadores separados por comas funciona. En Python con imaplib, tengo algo como:

status, email_ids = con.search(None, query) 
    if status != 'OK': 
     raise Exception("Error running imap search for spinvox messages: " 
         "%s" % status) 

    fetch_ids = ','.join(email_ids[0].split()) 
    status, data = con.fetch(fetch_ids, '(RFC822.HEADER BODY.PEEK[1])') 
    if status != 'OK': 
     raise Exception("Error running imap fetch for spinvox message: " 
         "%s" % status) 
    for i in range(len(email_ids[0].split())): 
     header_msg = email.message_from_string(data[i * 3 + 0][1]) 
     subject = header_msg['Subject'], 
     date = header_msg['Date'], 
     body = data[i * 3 + 1][1] # includes some mime multipart junk 
3

Puede probar esto a buscar la información de la cabecera de todos los mails en tan sólo 1 Ir al servidor.

import imaplib 
import email 

obj = imaplib.IMAP4_SSL('imap.gmail.com', 993) 
obj.login('username', 'password') 
obj.select('folder_name') 
resp,data = obj.uid('FETCH', '1:*' , '(RFC822.HEADER)') 
messages = [data[i][1].strip() + "\r\nSize:" + data[i][0].split()[4] + "\r\nUID:" + data[i][0].split()[2] for i in xrange(0, len(data), 2)] 
for msg in messages: 
    msg_str = email.message_from_string(msg) 
    message_id = msg_str.get('Message-ID') 
Cuestiones relacionadas