2012-04-24 16 views
6

me gustaría obtener una lista de todos los que alguna vez han incluido en cualquier mensaje en mi bandeja de entrada. En este momento puedo utilizar la API de correo javax para conectarse a través de IMAP y descargar los mensajes:lectura más rápida de la bandeja de entrada en Java

Folder folder = imapSslStore.getFolder("[Gmail]/All Mail"); 
folder.open(Folder.READ_ONLY); 
Message[] messages = folder.getMessages(); 

for(int i = 0; i < messages.length; i++) { 
    // This causes the message to be lazily loaded and is slow 
    String[] from = messages[i].getFrom(); 
} 

Los mensajes de la línea [i] .getFrom() es más lento de lo que me gustaría, ya que se hace que el mensaje sea perezosamente cargado. ¿Hay algo que pueda hacer para acelerar esto? P.ej. ¿Hay algún tipo de carga masiva que puedo hacer en lugar de cargar los mensajes uno por uno? ¿Esto carga el mensaje completo y hay algo que puedo hacer solo para cargar los campos/encabezados to/from/cc? ¿Sería POP más rápido que IMAP?

Respuesta

5

Puede utilizar fetch -method en carpeta. Según Javadocs:

Los clientes utilizan este método para indicar que los elementos especificados son necesaria en masa para la gama mensaje dado. Las implementaciones se espera para recuperar estos elementos para la gama mensaje dado de una manera eficiente . Tenga en cuenta que este método es sólo una sugerencia para la aplicación a precargar los elementos deseados.

Para ir a buscar FROM apropiado FetchProfile es ENVELOPE. Por supuesto, todavía depende de la implementación y el servidor de correo realmente ayuda.

6

que desea añadir el texto siguiente antes del bucle for

FetchProfile fetchProfile = new FetchProfile(); 
fetchProfile.add(FetchProfile.Item.ENVELOPE); 
folder.fetch(messages, fetchProfile); 

Esto precargar el "sobre" para todos los mensajes, que incluye los campos/sujeto/cc desde/a.

Cuestiones relacionadas