7 Stimmen

Kann ich eine Suche auf dem Mailserver in Java durchführen?

Ich versuche, eine Suche in meiner Google Mail mit Java durchzuführen. Mit JavaMail kann ich eine Suche nach Nachrichten wie folgt durchführen:

Properties props = System.getProperties();
props.setProperty("mail.store.protocol", "imaps");
Session session = Session.getDefaultInstance(props, null);
Store store = session.getStore("imaps");
store.connect("imap.gmail.com", "myUsername", "myPassword");

Folder inbox = store.getFolder("Inbox");
inbox.open(Folder.READ_ONLY);

SearchTerm term = new SearchTerm() {
  @Override
  public boolean match(Message mess) {
    try {
      return mess.getContent().toString().toLowerCase().indexOf("boston") != -1;
    } catch (IOException ex) {
      Logger.getLogger(JavaMailTest.class.getName()).log(Level.SEVERE, null, ex);
    } catch (MessagingException ex) {
      Logger.getLogger(JavaMailTest.class.getName()).log(Level.SEVERE, null, ex);
    }
    return false;
  }
};

Message[] searchResults = inbox.search(term);
for(Message m:searchResults)
  System.out.println("MATCHED: " + m.getFrom()[0]);

Dazu muss jedoch jede einzelne Nachricht heruntergeladen werden. Natürlich kann ich alle Ergebnisse zwischenspeichern, aber das wird bei großen Google Mail-Postfächern zu einem Speicherproblem und wäre außerdem sehr langsam (ich kann mir nur vorstellen, wie lange es dauern würde, Gigabytes an Text zu durchsuchen...).

Meine Frage ist also, gibt es eine Möglichkeit, die Mails auf dem Server zu durchsuchen, ähnlich wie das Suchfeld von Google Mail? Vielleicht über Microsoft Exchange?

Stundenlanges Googeln hat nichts ergeben.

3voto

Martin Punkte 35108

Mit dem entsprechenden IMAP-Befehl können Sie den Server die Suche für Sie übernehmen lassen. Mit dem SEARCH-Befehl kommen Sie nicht sehr weit. Was Sie wahrscheinlich brauchen, ist der SORT-Befehl. SORT ist in JavaMail nicht implementiert, aber der Dokumentation zeigt, wie Sie es selbst umsetzen können:

http://java.sun.com/products/javamail/javadocs/com/sun/mail/imap/IMAPFolder.html#doCommand(com.sun.mail.imap.IMAPFolder.ProtocolCommand)

(Ich konnte nicht herausfinden, wie man einen Link zu einer URL mit Klammern setzt)

0voto

jqa Punkte 1342

Verbinden Sie sich mit dem Exchange IMAP-Speicher und verwenden Sie javax.mail.search.SearchTerm

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X