2011-01-10 13 views
6

Próbuję uzyskać wiadomości po upływie pewnego czasu stempla, sposób mam zakodowanego sugerowano przez innego programistę w tym miejscu:JavaMail: jak zdobyć nowe wiadomości porównując ze stempli czasowych

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

Problem polega na tym, że otrzymuję wszystkie wiadomości od daty, a nie konkretnej godziny. Zastanawiałem się, czy jest jakieś obejście, żeby to naśladować. Chodzi mi o to, że na przykład, jeśli chcę uzyskać wszystkie wiadomości od dzisiaj w południe, otrzymam te wiadomości konkretnie, a nie te, które otrzymałem w dzisiejszym poranku.

Dzięki z góry,

EDIT:

nowa myśl dotyczącą tego: może jakiś termin manipulacja może załatwić sprawę. To znaczy, porównywanie minut w sygnaturze czasowej i programowo filtrować wiadomości, które nie spełniają kryteriów. Wiem, że to nie jest najlepszy sposób, ale to może zadziałać.

PS: Używam protokołu IMAP i próbuję otrzymywać wiadomości e-mail z Gmaila, ale domyślam się, że powinien działać bez względu na serwer pocztowy.

+1

Jeśli wcięcia kodu z 4 pomieszczeń, więc sformatować go jako kodu, a nie jako wrappable bloku tekstu. – dkarp

Odpowiedz

9

Niestety, nie. W tym przypadku protokół IMAP jest używany przez klasy JavaMail, a komenda IMAP SEARCHtakes only dates, not times (patrz kryteria SINCE i SENTSINCE).

+0

Dzięki dkarp. Mówiąc dalej, czy jest jakiś sposób naśladowania zachowania agentów pocztowych na temat otrzymywania nowych wiadomości? Mam na myśli, że jeśli chcę otrzymywać tylko nowe wiadomości (i nie pobierać ich więcej niż raz), jak mogę to zrobić? –

+4

Istnieje kilka sposobów, aby to zrobić. Możesz zapamiętać najwyższy UID w folderze, a następnie zrobić folder '((UIDFolder)) .getMessagesByUID (highuid + 1, UIDFolder.LASTUID)'. Możesz zrobić 'folder.search (new FlagTerm (new Flags (Flags.Flag.RECENT), true))', aby uzyskać wszystkie wiadomości dodane od ostatniego klienta IMAP podłączonego do folderu, ale to nie zadziała, jeśli inny IMAP klienci są aktywni. – dkarp

2

Można użyć metody setTime() do zapytania o określony czas.

Przykład:

setTime(timeInMilliseconds) 
Powiązane problemy