1

私が取り組んでいるアプリケーションには、JavaMail を使用して IMAP 経由でメール サーバーに接続する機能があります。クライアントの 1 人には、次のスタック トレースがありました。

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].setFlag(Flags.Flag.RECENT, false);

はどこmessages[i]ですかjavax.mail.Message

現在、このエラーは、Exchange Server 2003 を使用しているどのクライアントにも発生していません。このクライアントは Exchange Server 2007 を使用しているため、何か関係があると思います (バグ?)。また、最新のサービス パックとロールアップ アップデート (この記事の執筆時点でサービス パック 1 アップデート 8) と最新の JavaMail (この記事の執筆時点で 1.4.2) に更新したことも確認しましたが、影響はありませんでした。私の質問は、これはマイクロソフトが修正するのを待たなければならないものですか? 使用できる回避策はありますか?

記録として、recent フラグを false に設定する理由は、指定されたメッセージが 2 番目のパスで再度処理されないようにするためです (つまり、最近または新しいメッセージのみを処理します)。

4

1 に答える 1

1

Flags.Flag.RECENTのAPIを読んだところ、クライアントアプリからの読み取り専用であることがわかりました。フォルダの実装では、「メッセージがこのフォルダに新しく追加された」ときに設定する必要があります。したがって、フォルダの実装を作成しているのでない限り、このフラグを変更するべきではありません。

それはあなたの他のクライアントがなぜエラーを受け取らないのか疑問に思う人を残します。おそらくそれはNOOPとして扱われる場合がありますか?おそらく、この特定のクライアントのフォルダには何か特別なものがありますか?おそらく、共有フォルダー、またはユーザーが読み取りアクセス権を持っているフォルダーですか?私はExchangeメッセージストアの謎を熟考する準備ができていません。

于 2009-06-30T20:07:50.487 に答える