javax.mail 패키지를 사용하는 IMAP 폴더에서 java를 사용하여 이메일을 가져 오는 것을 배우고 있습니다. 폴더의 마지막 n 개의 메시지를 성공적으로 검색 할 수 있었지만 지정된 날짜 이후에 메시지를 검색하는 예제를 만들려고합니다. 어떤예요?java imap은 날짜 이후로 메일을 가져옵니다.
답변
Java 메일 패키지의 SearchTerm 클래스를 사용할 수도 있습니다.
위의 일부 조합은 특정 범위 내에서 날짜를 얻는 더 좋은 방법임을 입증해야합니다. 지난 달에
receivedDateTerm을 사용하려고하는데 정확한 결과를 돌려주지 않는 것 같다. 필자는 지난 1 분 동안받은 모든 메일을 검색하거나 테스트가 시작된 시점부터받은 모든 메일을 검색하려고합니다. 그것은 예상대로 작동하지 않습니다. 이것은 내가하고있는 일입니다. 'SearchTerm st = new AndTerm (새 SubjectTerm (subjectSearchPhrase), 새 BodyTerm (bodySearchPhrases));st = new AndTerm (st, new ReceivedDateTerm (ComparisonTerm.GE, searchMailReceivedDateGE));'또한 YoungerTerm (80)을 사용해 보았는데 이것도 작동하지 않습니다. 어느 누구도 문제를 알고 있습니까? 감사! – OverrockSTAR
주목할 점 : IMAP은 시간 만 아닌 상태로만 검색 할 수 있으므로 마지막 업데이트 이후에 새로운 메일을 모두 가져 오려면 비교 날짜를 자정으로 설정하고 추가 확인을해야합니다 클라이언트에서 중복. – Tobl
다음은 내가 생각해 낸 것입니다. 이것은 나를 위해 작동하지만 아마 그것에 대해 갈 수있는 가장 좋은 방법은 아닙니다. 이것을 개선하기위한 제안이 있습니까?
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());
}
}
IMAP 기능을 사용하여 전자 메일을 필터링하지 않고 먼저 전자 메일을 가져 오는 좋은 방법은 아닙니다. 나는 10 배 증가가 그것을 훨씬 좋게하지 않는다고 믿는다. (상자에 10k 개의 이메일을 상상해 보라.) – Konstantin
모든 메시지를 가져 오는 대신 서버 측 검색을 활용 해보십시오. 검색 메서드를 사용하여이 작동합니다. javax.mail.Folder. 아마도 Message.getReceivedDate()에 대한 기준에 따라 자체 SearchTerm을 작성해야합니다.
서버 측 검색이 작동하지 않으면 가져 오기 프로필을 사용해 볼 수 있습니다. 즉, inbox.getMessages() 대신 inbox.fetch (Message [] msgs, FetchProfile fp)를 사용합니다. 가져 오기 용 javadoc의 메시지 : 클라이언트는이 메소드를 사용하여 지정된 항목이 주어진 메시지 범위에 대해 한꺼번에 필요하다는 것을 표시합니다. 구현은 주어진 메시지 범위에 대해 이러한 항목을 효율적으로 검색 할 것으로 예상됩니다. 이 메소드는 원하는 항목을 프리 페치 (prefetch)하기위한 구현에 대한 힌트 일뿐입니다.
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);
}
}
모든 메일 :
Calendar cal = Calendar.getInstance();
cal.roll(Calendar.MONTH, false);
Message[] search = folder.search(new ReceivedDateTerm(ComparisonTerm.GT, cal.getTime()));
- 1. 특정 날짜 이후로 C# 초
- 2. IMAP은 응용 프로그램 메일 서버에 사용하기에 적합합니까?
- 3. Python : 날짜 문자열에서 경과 된 연수를 가져옵니다.
- 4. MySQL 쿼리에서 날짜 범위를 가져옵니다.
- 5. 이후로 변경된 파일
- 6. Gmail에서 사용자의 읽지 않은 메일을 가져옵니다.
- 7. Java 프로그램의 이름을 가져옵니다.
- 8. 날짜 이후로 개발 데이터베이스에서 프로덕션 데이터베이스로 데이터를 이동하는 방법은 무엇입니까?
- 9. C++ 일부 날짜 이후로 밀리 초 가져 오기
- 10. Java struts는 인덱스에서 속성을 가져옵니다.
- 11. AS400 서버에서 Java 프린터를 가져옵니다.
- 12. 이 날짜/시간 문자열을 Java 날짜 변수로 변환하는 방법은 무엇입니까?
- 13. ProtectedData.Unprotect() 이후로 가장()
- 14. 날짜 입력을위한 Java JFormattedTextField
- 15. Java Oracle 날짜
- 16. Java 날짜 및 시간
- 17. Java 날짜 구문 분석
- 18. MySQL 날짜 변환에서 Java 날짜 변환
- 19. Java 웹 서비스, 날짜 대신 xsd 날짜
- 20. MySQL의 날짜/날짜 시간 열과 Java 지속성
- 21. Java 애플릿에서 올바른 로컬 IP 주소를 가져옵니다.
- 22. android java 문자열에서 html image 태그를 가져옵니다.
- 23. Java overriding hashCode()는 StackOverflowError를 가져옵니다.
- 24. Java 및 Scala에서 와일드 카드 사용을 가져옵니다.
- 25. SVN 오늘 이후로 커밋이 깨졌습니다.
- 26. n 번째 단어 이후로 내기
- 27. XAML 이후로 단추를 표시하려면 어떻게해야합니까?
- 28. 스레드를 기준으로 전자 메일을 그룹화하는 Java 라이브러리?
- 29. Java 응용 프로그램에서 메일을 보낼 수 없습니다.
- 30. java api를 사용하여 메일을 호스팅하는 방법은 무엇입니까?
관련 : http://stackoverflow.com/questions/6963256/javamail-search-by-receiveddate-doesnt-work-down-to- 두 번째 – kevinarpe