2009-06-26 5 views
1

私が進めているアプリケーションでは、JavaMailを使用してIMAP経由でメールサーバーに接続する機能があります。JavaMailとExchange Server 2007の問題 - BADコマンドの引数

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に設定している理由は、指定されたメッセージが2回目のパスで再度処理されないようにするためです(つまり、最近または新しいメッセージのみを処理する)。

答えて

1

Flags.Flag.RECENTのAPIを読むと、クライアントアプリケーションから読み取り専用であることが示されます。フォルダ実装は、 "メッセージがこのフォルダに新規である"ときにそれを設定する必要があります。したがって、Folder実装を記述している場合を除き、このフラグは変更しないでください。

あなたの他のクライアントがエラーを起こさない理由は不思議です。おそらく、NOOPとして扱われることもあります。おそらく、この特定のクライアントのフォルダには何か特別なものがありますか?おそらく共有フォルダ、またはユーザーが読み取りアクセス権を持っているフォルダですか?私は、Exchangeメッセージストアの謎を考える機会がありません。

+0

Exchange Server 2007の他のクライアントにも同じ問題がありました。彼らは、メールボックスを削除して再作成し、2003年から2007年にアップグレードの問題に至るまでに問題を「解決」しました。この他のクライアントには、メールボックスの再作成にもかかわらず問題があります。現在、2003年を使用しているクライアントはまだ不平を言っていません。 – Avrom

+0

あなたが正しく指しているJavadocを理解している場合、メールフォルダを適切に閉じてから後で再度開くと、直前に開いていたすべてのメッセージの最近のフラグがオフになるはずです。もしそうなら、それは私の必要を満たすはずです。 – Avrom

+0

@Avrom:それは私の理解だろう。クローズと再オープンは、新しいメッセージをRECENTとしてマークする必要があります。しかし、あなたのアプリだけがフォルダにアクセスしていますか?そうでない場合は、他のアプリがフォルダを開いたり閉じたりすると問題が発生すると思われます。私はExchange(または任意のIMAPサーバー)があなたのアプリケーションのためだけにRECENTフラグを保持するかどうかは疑いがあります。アプリケーションが処理されたメッセージを知ることが重要な場合は、おそらくメッセージにユーザー定義のフラグを設定する必要があります。 –

関連する問題