2013-04-28 2 views
1

JavaMail API와 IMAP를 사용하여 메일이 폴더 a에서 b로 이동되었음을 알았 으면합니다. 리스너를 추가하지 않고 어떻게 할 수 있습니까? 나는 계정에 로그인하고 폴더를 열 때 메시지의 변화를 발견하고 싶다.IMAP을 이용한 메일 링 : 메시지가 한 폴더에서 다른 폴더로 이동 한 것을 탐지하는 방법은 무엇입니까?

문제는 폴더 1에 ID가 1 2 및 3 인 3 개의 메시지가 있고 ID가 3 인 메시지를 폴더 B로 이동하면 메시지의 ID가 변경되고 폴더에 ID가 1 인 메시지가있는 것입니다 B.

내 목표는 메일 서버의 메시지 구조를 내 로컬 서버와 동기화하는 것입니다. 나는 모든 메시지 정보, 깃발 등을 혼자서 지켜야한다. 따라서 로그인 할 때마다 메일 서버에 저장된 메시지의 모든 변경 사항을 발견해야합니다.

I에 의해 신규 또는 읽지 않은 메일을받을 수 있습니다

Message messages[] = inbox.search(new FlagTerm(new Flags(Flag.RECENT), true)); 

또는

Message messages[] = inbox.search(new FlagTerm(new Flags(Flag.SEEN), false)); 

에 의해하지만 난 단지 새 메일에 관심이없는 나는, 나는 또한 이전의 변경 사항을 알고 싶다 예를 들어 나는 그것에 대해 알리고 싶다 :

2 개월 전에 읽은 메일을 다른 폴더로 옮겼다.

내 생각은, UID를 변경하기 때문에

, 내가 메일을 식별하는 것을 사용할 수 없습니다. 제목 송신자 수신 날짜와 같은 메일 정보를 사용하고 해시 값을 작성하고 각 로그인시 메시지의 해시 값을 비교해야한다고 생각합니다. 성능 문제가 발생할 수 있습니다.

답변

2

메일을 폴더로 옮길 때 변경해서는 안되는 [email protected]과 같은 메시지 ID가 포함 된 rfc822 헤더 정보를 사용해 볼 수 있습니다. 하지만 사용자의 모든 메일 헤더를 크롤링하여 동기화해야합니다. 적어도 이동 된 메일을 가져 오는 방법을 모르겠습니다.

+1

은 정확히 대답하려고합니다. Message-ID는 사용하기에 적합한 필드입니다 ... 물론 여러 폴더에 * 복사 * 된 메일을 고려해야하며 모든 메시지에 Message-ID (초안 ...?)가 없습니다. – rolfl

+0

모든 메시지가 아닙니다. ''Message-Id'' 헤더를 가지고 있으며,이 헤더는 슬프게도 유일무이 함을 보장하지 않습니다. 인터넷 프로토콜과 RFC에 관해서, 당신은''반드시 (SHOULD) ''표현에 의존 할 수 없다. –

+0

이 페이지의 내용 : http://stackoverflow.com/questions/219343/get-uid-for-message-from-gmail-using-javax-mail-with-imap?rq=1 Message-ID is 대부분의 경우에는 고유하지만 모든 경우에는 그렇지 않습니다.특히 자동화 된 발신자는 동일한 ID를 생성하거나 전혀 사용하지 않습니다 (메시지 ID :) – benchpresser

4

IMAP에서 할 수 없습니다. Message-Id 헤더를 추적하면 중간에 위치 할 수 있지만 중복 된 메시지 ID (예 : , 고유 한 것으로 가정하면) 등의 모서리가있는 경우에는 모든 종류의 검사를 추가해야합니다. 또한 기본 IMAP 하나의 편지함에 대해 잘 동기화 된보기이며, 결합 될 때 일련의 편지함에 대한 기본보기가 아 U니다. 즉, 사용자가 폴더 A와 B간에 메시지를 "이동"했더라도 긴 기간 동안 스크립트에서 A와 B 모두에서 잘 표시 될 수 있습니다.

일부 IMAP 서버에는 메시지 페이로드의 암호화 해시가 포함 된 FETCH의 비표준 필드가 추가되었습니다. 하지만 여전히 비표준입니다.

+0

썬더 버드 사용시 다른 도구에서 폴더를 만들고 아주 오래된 메시지를 이동할 때 새 폴더에 메시지를 보내면 썬더 버드는 새 폴더와 새 메시지를 즉시 가져옵니다. thunderbird는 시작부터 모든 메시지를 가져 와서 일종의 comparsion을 응용하거나 메일 서버가 a와 b와 같은 특정 정보를 제공한다는 것을 알고 있습니까? – benchpresser

+0

나는 2000 개의 메시지가있는 메일 계정으로 테스트했다. 아주 오래된 메시지를 폴더에서 다른 폴더 (썬더 버드 이외의 다른 메일 클라이언트 도구, 웹 기반 qmail 엔진, 다람쥐 메일)로 옮길 때 썬더 버드 폴더를 클릭하면 이동 된 메시지가 사라집니다. 어떻게 thunderbird가 그렇게 빨리 배울 수 있습니까? – benchpresser

+1

"이동"을 감지하는 방법에 대해 질문했습니다. IMAP은 "사서함 X에서 사라지는 메시지 A"및 "사서함 Y에 나타나는 메시지 B"에 대한 정보 만 제공합니다. A == B를 쉽게 찾을 수있는 확실한 방법은 없습니다. UIDPLUS 확장은 특정 상황에서 도움이 될 수 있지만 완전한 해결책이 아닙니다. –