JavaMail búsqueda por ReceivedDate, ¿no funciona hasta el segundo?

En IMAP, la numeración de mensajes se basa en cuando un mensaje se coloca en una carpeta (es decir, el primer mensaje en la carpeta es 1, el segundo mensaje en es 2, etc.). Sin embargo, este pedido no tiene en cuenta la fecha de recepción de un mensaje. Lo que me preocupa son los mensajes anteriores al mensaje número 1 de la carpeta, es decir, un mensaje que un usuario ha movido a una carpeta manualmente (y no cuando se recibió en el sistema).

No puedo obtener la fecha de recepción de todos los mensajes, ya que esto es muy poco eficiente.

I pensamient Podría hacer una búsqueda en JavaMail para obtener todos los mensajes con una fecha de recepciónmayo que la fecha de recepción del primer mensaje (y del mismo modo, haga una búsqueda para obtener todos los mensajes con una fecha recibidamás nuev que la fecha de recepción del primer mensaje ... que serían muchas, pero aunque necesito procesar TODAS las más antiguas, solo necesito procesar algunas de las más nuevas (y por proceso, me refiero a descargar sus encabezados) .

Sin embargo, cuando estoy usando la búsqueda, simplemente no parece funcionar correctamente.

        Message[] messages = csqFolder.getMessages();           

        if (messages != null && messages.length > 0) {

            Date receivedDate = messages[0].getReceivedDate();
            log.trace("Message 1 receivedDate: <" + receivedDate.toString() + ">");
            SearchTerm msgsOlderThanOETFirst = 
                new ReceivedDateTerm(DateTerm.LT, receivedDate);

            SearchTerm msgsNewerThanFirst = 
                new ReceivedDateTerm(DateTerm.GT, receivedDate);

            Message[] oldMsgs = csqFolder.search(msgsOlderThanOETFirst, messages);
            log.trace("Size of oldMsgs: <" + oldMsgs.length + ">");
            Message[] newMsgs = csqFolder.search(msgsNewerThanFirst, messages);
            log.trace("Size of newMsgs: <" + newMsgs.length + ">");

Sin embargo, cuando ejecuto estas búsquedas, no parece dar los resultados correctos.

En una carpeta con 8 mensajes, 7 de los cuales tienen una fecha de recepción de alrededor de las 12:00 p.m. del 5 de agosto, pero el primer mensaje en la carpeta que es a las 4:00 p.m. del 5 de agosto, veremos lo siguiente: @

Message 1 receivedDate: <Fri Aug 05 16:46:57 CDT 2011>
Size of oldMsgs: <0>
Size of newMsgs: <7>

Sin embargo, TODOS los siete mensajes restantes son anteriores al primer mensaje ... TODOS deberían estar en mensajes antiguos.

Dicho esto, SI pongo un mensaje del día anterior (4 de agosto) en esa carpeta, entonces la búsqueda funcionará correctamente ... para ese UNO mensaje. Es como si la búsqueda solo funciona día a día, no hasta el segundo ...

Debo señalar que en el término msgsOlderThanOETFirst, originalmente estaba usando LE (de ahí el nombre), sin embargo, eso cambiaría los resultados anteriores: TODOS los mensajes se encontrarían en mensajes antiguos.

¿Alguien más puede confirmar si este comportamiento es verdadero y, de ser así, señalaría un error en Java?

Traté de buscar en el código fuente de búsqueda, pero creo que estaba obteniendo una versión de línea de comando y no del tipo que utiliza el paquete javamail ...

Estoy usando MS Exchange 2007 con SP1 y JavaMail 1.4.3.

Gracias por cualquier sugerencia.

ACTUALIZAR No creo que mi lectura de la orden de comparación sea incorrecta. Mira la respuesta dada en el siguiente hilo:java imap recuperar mensajes desde una fecha

Supongamos que usamos esa respuesta, y tenemos nuestros límites del 15/07/2011 al 15/09/2011. Luego tenemos la búsqueda de comparar un mensaje con una fecha determinada del 8/8/2011. Entonces tendríamos lo siguiente:

                                              8/4/2011  <     9/15/2011
SearchTerm olderThen = new ReceivedDateTerm(ComparisonTerm.LT, someFutureDate);
SearchTerm newerThen = new ReceivedDateTerm(ComparisonTerm.GT, somePastDate);
                                              8/4/2011  >     7/15/2011

Esto se evaluaría como verdadero en ambos casos, que es lo que esperamos, ya que la fecha está en el rango deseado.

Igualmente, mi código es el siguiente:

    SearchTerm msgsOlderThanOETFirst =    8/4/2011  < 8/5/2011
            new ReceivedDateTerm(DateTerm.LT, receivedDate); --> TRUE
    SearchTerm msgsNewerThanFirst =       8/4/2011  > 8/5/2011
            new ReceivedDateTerm(DateTerm.GT, receivedDate); --> FALSE

Las evaluaciones anteriores de VERDADERO y FALSO son lo que espero y recibiré. Sin embargo, si tomamos un mensaje dado el 5/08/2011 12:00:00, obtenemos lo siguiente:

    SearchTerm msgsOlderThanOETFirst =    8/5/2011 12:00:00  < 8/5/2011 16:46:00
            new ReceivedDateTerm(DateTerm.LT, receivedDate); --> TRUE?
    SearchTerm msgsNewerThanFirst =       8/4/2011 12:00:00  > 8/5/2011 16:46:00
            new ReceivedDateTerm(DateTerm.GT, receivedDate); --> FALSE?

Excepto, no, no entendemos eso, en cambio, obtenemos lo contrario ... es fácil pensar en círculos en este momento, pero ... Lo he comprobado varias veces. ¿Hay algo mal con JavaMail, o estoy completamente confundido? ¡Corrija mi confusión si es lo último!

Respuestas a la pregunta(1)

Su respuesta a la pregunta