java imap извлекает сообщения с даты - PullRequest
7 голосов
/ 15 мая 2009

Я пишу / учусь получать электронную почту, используя java из папки IMAP, используя пакет javax.mail. Мне удалось получить последние n сообщений в папке, однако я ищу пример получения сообщений с указанной даты. Есть примеры?

Ответы [ 5 ]

22 голосов
/ 16 мая 2009

Вы также можете использовать классы SearchTerm в почтовом пакете Java.

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

Некоторая комбинация вышеперечисленного должна оказаться лучшим способом получения дат в определенном диапазоне.

5 голосов
/ 24 июня 2010
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);
    }
}
2 голосов
/ 15 мая 2009

Вместо того, чтобы извлекать все сообщения, вы должны попробовать воспользоваться поиском на стороне сервера. Это работает с использованием search метода javax.mail.Folder . Вам, вероятно, придется написать свой собственный SearchTerm на основе критерия Message.getReceivedDate ().

Если поиск на стороне сервера не работает, вы можете попробовать использовать профиль выборки, т.е. вместо inbox.getMessages () использовать inbox.fetch (Message [] msgs, FetchProfile fp). Javadoc для fetch говорит: Клиенты используют этот метод, чтобы указать, что указанные элементы необходимы в массовом порядке для данного диапазона сообщений. Ожидается, что реализации извлекут эти элементы для заданного диапазона сообщений эффективным способом. Обратите внимание, что этот метод является лишь подсказкой реализации для предварительной выборки нужных элементов.

0 голосов
/ 01 сентября 2015

Все письма за последний месяц:

    Calendar cal = Calendar.getInstance();
    cal.roll(Calendar.MONTH, false);
    Message[] search = folder.search(new ReceivedDateTerm(ComparisonTerm.GT, cal.getTime()));
0 голосов
/ 15 мая 2009

Вот что я придумал. Это работает для меня, но, вероятно, не лучший способ сделать это. Любые предложения по улучшению этого?

      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());
        }
      }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...