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
5
A
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
- 1. IMAP borrar mensajes
- 2. java imap recuperar mensajes desde una fecha
- 3. Criterios de IMAP con múltiples ORs
- 4. Múltiples transacciones de PayPal a la vez
- 5. Reemplazar múltiples subcadenas a la vez
- 6. Obteniendo solo correo nuevo de un servidor IMAP
- 7. ¿Puede jQueryCycle mostrar imágenes múltiples a la vez, pero deslice una a la vez?
- 8. Publicar artefactos hiedra a múltiples resolutores a la vez
- 9. ¿Cómo puedo aplicar estilos a múltiples clases a la vez?
- 10. ¿Crear mensajes (es decir, borradores) en Gmail con IMAP/SMTP?
- 11. Python, IMAP y GMail. Marcar mensajes como se ve
- 12. Batch de IMAP buscar texto parte de mensajes
- 13. Sincronización IMAP
- 14. Recuperar mensajes múltiples de SQS
- 15. Obteniendo todos los mensajes de InnerException (s)?
- 16. Obteniendo múltiples transmisiones desde intenciones?
- 17. Obteniendo mensajes de error en Windows 7
- 18. ¿Cómo puedo comprometer múltiples directorios a la vez usando subversion?
- 19. Ejecutar múltiples arañas de scrapy a la vez usando scrapyd
- 20. ¿Cómo instalar múltiples gemas de rubí a la vez?
- 21. asignar múltiples variables a la vez en Scala
- 22. SQL - Inserción y actualización de múltiples registros a la vez
- 23. eclipse: ejecutando múltiples configuraciones de inicio a la vez
- 24. Jquery validación de múltiples pestañas, validar una a la vez?
- 25. Uso de múltiples bases de datos SQLite a la vez
- 26. Crear artefactos múltiples con diferentes clasificadores a la vez
- 27. ¿Cómo salir de múltiples bucles a la vez en C#?
- 28. Captura de múltiples excepciones a la vez en Scala
- 29. ¿Cómo construyo múltiples proyectos a la vez usando Albacore?
- 30. ¿Puedo rastrear múltiples eventos de Google Analytics a la vez?
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. –