2011-01-10 4 views
6

Ich versuche, Nachrichten nach einer bestimmten Zeit-Stempel zu bekommen, wie ich codiert habe es von einem anderen Programmierer auf dieser Seite vorgeschlagen wurde:Java Mail: wie neue Nachrichten erhalten Vergleich mit Zeitmarken

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

Das Problem ist, dass ich alle Nachrichten seit dem Datum, nicht die bestimmte Zeit bekomme. Ich habe mich gefragt, ob es einige Workarounds gibt, um das nachzuahmen. Ich meine, für einen Fall, wenn ich alle Nachrichten seit heute Mittag bekommen möchte, würde ich diese Nachrichten spicifically bekommen und nicht jene, die am heutigen Morgen erhalten werden.

Vielen Dank im Voraus,

EDIT:

Ein neuer Gedanke dazu über: vielleicht einige Datum Manipulation die Arbeit machen konnte. Ich meine, die Minuten im Zeitstempel zu vergleichen und programmatisch diejenigen Nachrichten zu filtern, die den Kriterien nicht entsprechen. Ich weiß, es ist nicht der beste Weg, aber es könnte funktionieren.

PS: Ich benutze IMAP und versuche, Mails von Google Mail zu bekommen, aber ich denke, es sollte funktionieren, egal was der Mail-Server ist.

+1

Wenn Sie Ihren Code mit 4 Leerzeichen einrücken, so wird es als Code formatiert werden und nicht als wickelbar Textblock. – dkarp

Antwort

9

Leider nein. In diesem Fall wird das IMAP-Protokoll von den JavaMail-Klassen und IMAP SEARCH Befehl takes only dates, not times verwendet (siehe SINCE und SENTSINCE Kriterien).

+0

Danke dkarp. Gibt es eine Möglichkeit, das Verhalten der Mail-Agenten zu emulieren, um neue Nachrichten zu erhalten? Ich meine, wenn ich nur neue Nachrichten bekommen möchte (und sie nicht mehr als einmal herunterladen möchte), wie könnte ich das tun? –

+4

Es gibt ein paar Möglichkeiten, es zu tun. Sie können sich die höchste UID im Ordner merken und dann einen '((UIDFolder) Ordner) .getMessagesByUID (highuid + 1, UIDFolder.LASTUID)'. Sie können eine 'folder.search (new FlagTerm (neue Flags (Flags.Flag.RECENT), true))' 'um alle Nachrichten seit dem letzten IMAP-Client hinzugefügt, die mit dem Ordner verbunden, obwohl dies funktioniert nicht, wenn andere IMAP Kunden sind aktiv. – dkarp

2

Sie können die Methode setTime() verwenden, um eine bestimmte Zeit abzufragen.

Beispiel:

setTime(timeInMilliseconds) 
Verwandte Themen