2010-07-30 2 views
2

imap을 사용하여 전자 메일 계정에서 모든 전자 메일을 가져 오는 응용 프로그램을 만들고 싶습니다. 처음 응용 프로그램을 실행할 때 모든 메일을받습니다. 다시 실행하면 이전에 읽은 메시지를 표시하여 새 메시지 만받을 수 있습니다.javax.mail.Api를 사용하여 Java 응용 프로그램이 수신 한 메시지를 표시하는 방법은 무엇입니까?

메시지 개체에 플래그 (시스템 플래그 및 사용자 정의 플래그)가 포함되어 있지만 하나의 사용자 정의 플래그를 설정할 수없는 것으로 나타났습니다.

전자 메일 계정에서 응용 프로그램이받은 메시지를 표시하거나 모든 메시지 ID를 유지해야하며 imap에서 메시지를 가져올 때마다 ID를 보유 ID와 비교해야합니다. 다른 ID를 가진 메시지 만?

답변

5

일부 IMAP 서버에서는 사용자 정의 플래그를 설정할 수 없습니다. 그러나 대부분은 그렇습니다. JavaMail에를 통해 다음을 수행 할 것 :

Flags flags = new Flags("fetched"); 
message.setFlags(flags, true); 

그 플래그가 영구적이지, 그러나 - 다른 IMAP 클라이언트는 쉽게 당신이 그들을 설정으로 그들을 취소 할 수 있습니다. (그들은 아마 그들은하지 않습니다.)

또 다른 옵션은 당신이 본 메시지의 UID를 추적하는 것입니다. 너는 ImapFolder.getUID(Message)을 통해 그들을 얻을 수 있습니다. 가져 오는 것이 훨씬 더 많은 Message-ID 헤더를 추적하는 것보다 쉽습니다. 문자열이기 때문에 앱에서 더 많은 메모리를 차지합니다.

또 다른 옵션은 POP를 사용하고 UIDL을 추적하는 것입니다.

+0

:

다음 코드를 사용합니다. 그래서 Message-ID 헤더를 사용합니다. 불행하게도 Message-ID 헤더가없는 일부 전자 메일이 있습니다. ( – telebog

+1

받은 편지함에서 가져 오는 것이 아니라면 선택이 제한됩니다. 할 수 없습니다. POP는 UID를 사용할 수 없습니다.'Flags' 옵션이 가장 잘 작동 할 수 있습니다. – dkarp

0

예 메시지를 읽음으로 표시 할 수 있으며 다음에 메시지를 읽으려는 경우 새 메시지 만 읽을 수 있습니다. 메시지를 삭제하거나 이동할 때 시간에 그 UID를 변경하기 때문에 내가 UID를 사용할 수 없습니다

Folder emailFolder = emailStore.getFolder("INBOX"); 
Message messages[] = emailFolder.search(new FlagTerm(new Flags(Flag.SEEN), false)); 
System.out.println("no of messages=" + messages.length); 

for (int i = 0; i < messages.length; i++) { 
    Message message = messages[i]; 
    //here write your code to read the message and whatever you wanna do// 
    //now at the end of the message(remember at the end of the message u read using code) write the following code// 
    message.setFlag(Flag.SEEN, true); 
}//end of for loop 
관련 문제