2009-06-26 4 views
1

내가 작업하고있는 응용 프로그램에는 JavaMail을 사용하는 IMAP을 통해 메일 서버에 연결하는 기능이 있습니다.JavaMail 및 Exchange Server 2007의 문제점 - 잘못된 명령 인수

이제
javax.mail.MessagingException: A13 BAD Command Argument Error. 11; 
nested exception is: 
com.sun.mail.iap.BadCommandException: A13 BAD Command Argument Error. 11 
at com.sun.mail.imap.IMAPMessage.setFlags(IMAPMessage.java:847) 
at javax.mail.Message.setFlag(Message.java:565) ... 

, 그것은 무엇을하려고 한 것은 다음과 같은 : messages[i]javax.mail.Message입니다

messages[i].setFlag(Flags.Flag.RECENT, false); 

고객 중 하나는 다음과 같은 스택 추적을했다.

이제이 오류는 Exchange Server 2003을 사용하는 클라이언트 중 한 명에게 발생하지 않았으며이 클라이언트는 Exchange Server 2007을 사용하고 있으므로이 서버와 관련이 있다고 생각합니다 (버그?). 또한 최신 서비스 팩 및 롤업 업데이트 (이 기사 작성 시점에서 서비스 팩 1 업데이트 8)와 최신 JavaMail (이 글을 쓰는 시점에서 1.4.2)에 업데이트되었는지 확인하고 아무런 영향을주지 않았습니다. 제 궁금한 점은, Microsoft가 고칠 때까지 기다려야 할 것이 있습니까? 제가 사용할 수있는 임시 해결책이 있습니까?

최근 플래그를 false로 설정하는 이유는 주어진 메시지가 두 번째 전달에서 다시 처리되지 않도록하기 위해서입니다. 즉, 최근 또는 새 메시지 만 처리합니다.

답변

1

Flags.Flag.RECENT에 대한 API를 읽는 것은 클라이언트 응용 프로그램에서 읽기 전용임을 나타냅니다. 폴더 구현은 "메시지가이 폴더에 새로 왔을 때"그것을 설정해야합니다. 따라서 Folder 구현을 작성하지 않는 한이 플래그를 수정해서는 안됩니다.

다른 클라이언트가 오류를 내지 않는 이유를 궁금해합니다. 어떤 경우에는 아마도 NOOP로 취급 될 것입니까? 아마도이 특정 클라이언트의 폴더에 특별한 것이 있습니까? 공유 폴더 또는 사용자가 읽기 액세스 권한이있는 폴더일까요? Exchange 메시지 저장소의 신비를 숙고 할 준비가되지 않았습니다.

+0

Exchange Server 2007의 다른 클라이언트 중 하나에 동일한 문제가있었습니다. 그들은 사서함을 삭제하고 다시 만들어서 문제를 "스스로 해결"했으며 2003 년에서 2007 년까지 업그레이드 문제가 발생했습니다.이 다른 클라이언트는 사서함을 다시 만들었음에도 불구하고 여전히 문제가 있습니다. 현재 2003 년을 사용중인 클라이언트 중 누구도 아직 불만을 제기하지 않았습니다. – Avrom

+0

올바르게 가리킨 Javadocs를 이해했다면 메일 폴더를 제대로 닫은 다음 나중에 다시 열면 이전에 열어 본 모든 메시지에 대해 최근 플래그가 꺼져 있어야합니다. 그렇다면 내 요구를 충족시켜야합니다. – Avrom

+0

@Avrom : 그것은 내 이해 일 것입니다. 닫고 다시 열면 새 메시지가 RECENT로 표시됩니다. 하지만 앱에 폴더에 액세스하는 유일한 앱이 있습니까? 그렇지 않은 경우 다른 프로그램에서 폴더를 열거 나 닫으면 문제가 발생할 것으로 판단됩니다. Exchange (또는 모든 IMAP 서버)가 응용 프로그램에 대한 최근 플래그를 유지할 것 인가 나는 의심 스럽다. 응용 프로그램에서 처리 된 메시지를 알아야하는 경우 메시지에서 사용자 정의 플래그를 설정해야 할 것입니다. –