2011-01-10 17 views
6

Estoy tratando de obtener mensajes después de un cierto sello de tiempo, la forma en que he codificado se sugirió por otro programador en este sitio:JavaMail: cómo conseguir nuevos mensajes comparan con sellos de tiempo

GregorianCalendar date = new GregorianCalendar(); 
SearchTerm newer = new ReceivedDateTerm(ComparisonTerm.GT,date.getTime()); 
Message msgs[] = folder.search(newerThen); 

El problema es que recibo todos los mensajes desde la fecha, no la hora específica. Me preguntaba si hay algo de trabajo para emular esto. Quiero decir, por ejemplo, si quiero recibir todos los mensajes desde hoy a mediodía, obtendría esos mensajes de manera específica y no los recibidos en la mañana de hoy.

Gracias de antemano,

EDIT:

Un nuevo pensamiento en relación a esto: quizá alguna manipulación fecha podría hacer el trabajo. Quiero decir, comparar los minutos en la marca de tiempo y filtrar los mensajes programáticamente que no se ajustan a los criterios. Sé que no es la mejor manera, pero podría funcionar.

PD: Estoy usando IMAP y tratando de obtener correos de gmail, pero creo que debería funcionar sin importar el servidor de correo.

+1

Si indentar código con 4 espacios, también lo hará formato como código en lugar de como un bloque de texto pueden envolver. – dkarp

Respuesta

9

Lamentablemente, no. En este caso, el protocolo IMAP está siendo utilizado por las clases JavaMail y el comando SEARCH de IMAP takes only dates, not times (ver los criterios SINCE y SENTSINCE).

+0

Gracias dkarp. Hablando en otras palabras, ¿hay alguna manera de emular el comportamiento de los agentes de correo sobre la obtención de mensajes nuevos? Quiero decir, si solo quiero recibir mensajes nuevos (y no para descargarlos más de una vez), ¿cómo podría hacerlo? –

+4

Hay algunas maneras de hacerlo. Puede recordar el UID más alto en la carpeta, luego hacer una carpeta '((UIDFolder)) .getMessagesByUID (highuid + 1, UIDFolder.LASTUID)'. Puede hacer una 'folder.search (new FlagTerm (new Flags (Flags.Flag.RECENT), true))' para obtener todos los mensajes agregados desde el último cliente IMAP conectado a la carpeta, aunque esto no funcionará si otro IMAP los clientes están activos. – dkarp

2

Puede utilizar el método setTime() para consultar durante un tiempo específico.

Ejemplo:

setTime(timeInMilliseconds) 
Cuestiones relacionadas