문제
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()));