Question

Je suis en train d'écrire / apprendre à chercher email en utilisant Java à partir d'un dossier IMAP en utilisant package javax.mail. J'ai été en mesure de récupérer avec succès les derniers messages n dans un dossier, mais je cherche à construire un exemple pour récupérer des messages depuis une date spécifiée. Tous les exemples?

Était-ce utile?

La solution

Vous pouvez également utiliser les classes searchTerm dans le package de messagerie java.

SearchTerm olderThan = new ReceivedDateTerm(ComparisonTerm.LT, someFutureDate);
SearchTerm newerThan = new ReceivedDateTerm(ComparisonTerm.GT, somePastDate);
SearchTerm andTerm = new AndTerm(olderThan, newerThan);
inbox.search(andTerm);

Une combinaison du doit prouver ci-dessus pour être une meilleure façon d'obtenir des dates dans une certaine plage.

Autres conseils

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);
    }
}

Au lieu d'aller chercher tous les messages que vous devriez essayer de profiter de la recherche côté serveur. Cela fonctionne en utilisant les recherche méthode de javax.mail.Folder . Vous devrez probablement écrire votre propre searchTerm basée sur un critère sur Message.getReceivedDate ().

Si la recherche de côté serveur ne fonctionne pas, vous pouvez essayer d'utiliser un profil Fetch, à savoir au lieu de inbox.getMessages () utiliser inbox.fetch (Message [] msgs, FetchProfile fp). Le javadoc Fetch dit: Les clients utilisent cette méthode pour indiquer que les éléments spécifiés sont nécessaires en masse pour la plage de message donné. Implémentations devraient récupérer ces éléments pour la gamme de message donné d'une manière efficace. Notez que cette méthode est juste une allusion à la mise en œuvre de précharger les éléments souhaités.

Voici ce que je suis venu avec. Cela fonctionne pour moi, mais sans doute pas la meilleure façon de s'y prendre. Toutes les suggestions pour améliorer?

      Date from; //assume initialized
      Store store; //assume initialized
      Folder inbox = store.getFolder("INBOX");
      inbox.open(Folder.READ_ONLY);
      int end = inbox.getMessageCount();
      long lFrom = from.getTime();
      Date rDate;
      long lrDate;
      int start = end;
      do {
        start = start - 10;
        Message testMsg = inbox.getMessage(start);
        rDate = testMsg.getReceivedDate();
        lrDate = rDate.getTime();
      } while (lrDate > lFrom);
      Message msg[] = inbox.getMessages(start, end);
      for (int i=0, n=msg.length; i<n; i++) {
        lrDate = msg[i].getReceivedDate().getTime();
        if (lrDate > lFrom) {
          System.out.println(i + ": "
            + msg[i].getFrom()[0]
            + "\t" + msg[i].getSubject());
        }
      }

Tous les mails du mois dernier:

    Calendar cal = Calendar.getInstance();
    cal.roll(Calendar.MONTH, false);
    Message[] search = folder.search(new ReceivedDateTerm(ComparisonTerm.GT, cal.getTime()));
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top