Ich schreibe/lernen, E-Mail mit Java aus einem IMAP-Ordner mit javax.mail-Paket abrufen. Ich konnte die letzten n Nachrichten in einem Ordner erfolgreich abrufen. Ich möchte jedoch ein Beispiel erstellen, um Nachrichten seit einem bestimmten Datum abzurufen. Irgendwelche Beispiele?java imap fetch Nachrichten seit einem Datum
Antwort
Sie könnten auch die SearchTerm-Klassen im Java-Mail-Paket verwenden.
SearchTerm olderThan = new ReceivedDateTerm(ComparisonTerm.LT, someFutureDate);
SearchTerm newerThan = new ReceivedDateTerm(ComparisonTerm.GT, somePastDate);
SearchTerm andTerm = new AndTerm(olderThan, newerThan);
inbox.search(andTerm);
Eine Kombination der oben genannten sollte sich als eine bessere Möglichkeit, Daten in einem bestimmten Bereich zu erhalten, erweisen.
Ich versuche receivedDateTerm zu verwenden, aber es scheint, dass es mir kein korrektes Ergebnis zurückgibt. Ich möchte nur alle Mails abrufen, die ich in den letzten 1 Minuten erhalten habe, oder alle E-Mails, die ich seit dem Start meines Tests erhalten habe. Es funktioniert nicht wie erwartet .. das ist was ich mache. 'SearchTerm st = neu AndTerm (neues SubjectTerm (subjectSearchPhrase), neues BodyTerm (bodySearchPhrases)); st = new AndTerm (st, neu ReceivedDateTerm (ComparisonTerm.GE, searchMailReceivedDateGE)); 'Ich habe auch versucht,' YoungerTerm (80) 'zu verwenden, und das funktioniert auch nicht. kennt jemand das Problem? Vielen Dank! – OverrockSTAR
Eine Sache zu beachten: IMAP kann nur nach Sate und nicht nach Zeit suchen. Wenn Sie also alle neuen Mails seit dem letzten Update erhalten möchten, müssen sie die Zeit ihres Vergleichsdatums auf Mitternacht setzen und weitere Prüfungen vornehmen Duplikate auf dem Client. – Tobl
Hier ist, was ich gefunden habe. Das funktioniert für mich, aber wahrscheinlich nicht der beste Weg. Irgendwelche Vorschläge, um das zu verbessern?
Definitiv kein guter Ansatz, da die E-Mails zuerst abgerufen werden, ohne sie mit IMAP-Funktionen zu filtern. Ich glaube, dass die zehnfache Erhöhung es nicht viel schöner macht (stellen Sie sich 10k E-Mails in der Box vor) – Konstantin
Anstatt alle Nachrichten abzurufen, sollten Sie versuchen, die serverseitige Suche zu nutzen. Dies funktioniert mit der Suche Methode javax.mail.Folder. Sie müssen wahrscheinlich Ihr eigenes SearchTerm basierend auf einem Kriterium in Message.getReceivedDate() schreiben.
Wenn serverseitige Suche nicht funktioniert, können Sie versuchen, ein Abrufprofil zu verwenden, d. H. Anstelle von inbox.getMessages() verwenden Sie inbox.fetch (Message [] msgs, FetchProfile fp). Das Javadoc zum Abrufen sagt: Clients verwenden diese Methode, um anzugeben, dass die angegebenen Elemente für den angegebenen Nachrichtenbereich en masse benötigt werden. Es wird erwartet, dass Implementierungen diese Elemente für den gegebenen Nachrichtenbereich auf effiziente Weise abrufen. Beachten Sie, dass diese Methode nur ein Hinweis auf die Implementierung ist, um die gewünschten Elemente vorab abzurufen.
public class CheckDate {
public void myCheckDate(Date givenDate) {
SearchTerm st = new ReceivedDateTerm(ComparisonTerm.EQ,givenDate);
Message[] messages = inbox.search(st);
}
// in main method
public static void main(String[] args) throws ParseException{
SimpleDateFormat df1 = new SimpleDateFormat("MM/dd/yy");
String dt="06/23/10";
java.util.Date dDate = df1.parse(dt);
cd.myCheckDate(dDate);
}
}
Alle E-Mails im letzten Monat:
Calendar cal = Calendar.getInstance();
cal.roll(Calendar.MONTH, false);
Message[] search = folder.search(new ReceivedDateTerm(ComparisonTerm.GT, cal.getTime()));
- 1. Ausnahme während Imap Fetch
- 2. IMAP FETCH Thema
- 3. IMAP Ordner/Nachrichten Synchronisationsstrategie?
- 4. IMAP Batch holen Text Teil der Nachrichten
- 5. Fetch imap Körper Nachricht per Telnet
- 6. IOS Swift. Zeit seit Datum
- 7. Abrufen mehrerer IMAP-Nachrichten auf einmal
- 8. Java/Ruby-basierte IMAP-Proxy-Bibliothek
- 9. IMAP-Listenerweiterung JAVA
- 10. Änderung anzeigen (neue und bearbeitete Dateien) seit einem bestimmten Datum
- 11. Count Anzahl der Tage seit einem bestimmten Datum
- 12. Swift Core Data Fetch Ergebnisse von einem bestimmten Datum
- 13. Python: Sekunden seit Epoche relatives Datum
- 14. Java Mail: wie neue Nachrichten erhalten Vergleich mit Zeitmarken
- 15. Android: How to Build seit Datum von Server-Datum
- 16. Github API v3: Ereignisse von seit Datum bis Datum abrufen
- 17. Gesamt Sekunden seit Mitternacht, Java
- 18. Nur neue E-Mails von einem IMAP-Server abrufen
- 19. werden seit einem bestimmten Datum in git basierend auf dem Commit-Datum
- 20. Python, IMAP und GMail. Markieren von Nachrichten als GESEHEN
- 21. Importieren von E-Mail-Nachrichten in Solr (kein IMAP)
- 22. Nachrichten in Java
- 23. Java Datum in Millisekunden
- 24. IMAP "Over Quota" spezifisches Scripting
- 25. Java - Methode an einem bestimmten Datum ausführen
- 26. erhalten Anzahl der Updates seit einem Zeitstempel in Facebook
- 27. IMAP Forwarder
- 28. facebook API v5 feed seit Datum funktioniert nicht
- 29. NSDateFormatter. Einstellung der Zeit seit dem Datum in Swift
- 30. Datum in Millisekunden seit Epoche mit Apache Derby konvertieren
Verwandte: http://stackoverflow.com/questions/6963256/javamail-search-by-receiveddate-doesnt-work-down-to- die Sekunde – kevinarpe