문제

javax.mail 패키지를 사용하여 IMAP 폴더에서 Java를 사용하여 이메일을 가져 오는 것을 작성/학습하고 있습니다. 폴더에서 마지막 N 메시지를 성공적으로 검색 할 수 있었지만 지정된 날짜 이후 메시지를 검색 할 예제를 작성하려고합니다. 예가 있습니까?

도움이 되었습니까?

해결책

Java 메일 패키지에서 Searchterm 클래스를 사용할 수도 있습니다.

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

위의 일부 조합은 특정 범위 내에서 날짜를 얻는 더 나은 방법으로 판명되어야합니다.

다른 팁

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

모든 메시지를 가져 오는 대신 서버 측 검색을 활용해야합니다. 이것은 사용하여 작동합니다 검색 의 방법 javax.mail.folder. Message.GetReceivedDate ()의 기준에 따라 자신의 검색기를 작성해야 할 것입니다.

서버 측 검색이 작동하지 않으면 inbox.getMessages () inbox.fetch (Message [] msgs, fetchprofile fp)를 사용하는 대신 페치 프로파일 (즉)를 사용해 볼 수 있습니다. Fetch의 Javadoc은 다음과 같이 말합니다. 클라이언트는이 메소드를 사용하여 지정된 항목이 주어진 메시지 범위에 대해 대기해야 함을 나타냅니다. 구현은 주어진 메시지 범위에 대해 이러한 항목을 효율적으로 검색 할 것으로 예상됩니다. 이 방법은 원하는 항목을 프리 페치하기 위해 구현에 대한 힌트 일뿐입니다.

여기 내가 생각해 낸 것입니다. 이것은 나에게 효과가 있지만 아마도 그것에 대해 가장 좋은 방법은 아닙니다. 이것을 개선하기위한 제안이 있습니까?

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

지난 달의 모든 메일 :

    Calendar cal = Calendar.getInstance();
    cal.roll(Calendar.MONTH, false);
    Message[] search = folder.search(new ReceivedDateTerm(ComparisonTerm.GT, cal.getTime()));
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top