2009-06-26 7 views
1

Dans l'application sur laquelle je travaille, il y a une fonction qui se connecte à un serveur de messagerie via IMAP en utilisant JavaMail. L'un de nos clients avaient la trace de la pile suivante:Problème avec JavaMail et Exchange Server 2007 - Argument de commande 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) ... 

Maintenant, ce qu'il essayait de faire est la suivante:

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

messages[i] est un javax.mail.Message.

Maintenant, cette erreur n'est jamais apparue à l'un de nos clients qui utilisent Exchange Server 2003 et puisque ce client utilise Exchange Server 2007, je suppose qu'il a quelque chose à voir avec cela (bug?). J'ai également veillé à ce qu'ils le mettent à jour avec le dernier service pack et la dernière mise à jour du correctif (Service Pack 1 mise à jour 8 à ce jour) et le dernier JavaMail (1.4.2 à ce jour). Ma question est, est-ce quelque chose que je dois attendre que Microsoft à résoudre? Y a-t-il une solution de contournement que je peux employer? Pour l'enregistrement, la raison pour laquelle je mets le drapeau récent à false est que le message donné ne sera pas traité à nouveau dans un second passage (c'est-à-dire qu'il ne traite que des messages récents ou nouveaux).

Répondre

1

Ma lecture de l'API pour Flags.Flag.RECENT indique qu'il est en lecture seule à partir d'une application cliente. L'implémentation du dossier doit le définir lorsque le "message est nouveau dans ce dossier". Donc, à moins d'écrire une implémentation de dossier, vous ne devriez pas modifier cet indicateur.

Cela laisse à se demander pourquoi vos autres clients ne reçoivent pas l'erreur. Peut-être est-ce traité comme un NOOP dans certains cas? Peut-être qu'il y a quelque chose de spécial dans le dossier de ce client particulier? Peut-être un dossier partagé ou un dossier auquel l'utilisateur a accès en lecture? Je ne suis pas équipé pour réfléchir aux mystères du magasin de messages Exchange.

+0

Un autre client sur Exchange Server 2007 a rencontré le même problème. Ils ont «résolu eux-mêmes» le problème en supprimant et en recréant la boîte aux lettres et en l'attribuant à un problème de mise à niveau de 2003 à 2007. Cet autre client a toujours le problème malgré la recréation de la boîte aux lettres. Aucun client utilisant actuellement 2003 ne s'est plaint encore. – Avrom

+0

Si je comprends bien les Javadocs que vous avez pointés correctement, si je ferme correctement le dossier courrier et que je le rouvre ultérieurement, le drapeau récent devrait être désactivé pour tous les messages qui étaient là la fois précédente. Si oui, cela devrait répondre à mes besoins. – Avrom

+0

@Avrom: Ce serait ma compréhension. La fermeture et la réouverture devraient marquer tout nouveau message comme RECENT. Mais, votre application est-elle la seule à accéder aux dossiers? Sinon, je suppose que vous aurez un problème si une autre application ouvre/ferme le dossier. Je doute que Exchange (ou tout serveur IMAP) conserve un drapeau RECENT juste pour votre application. S'il est important que votre application sache quels messages elle traite, vous devrez probablement définir un indicateur défini par l'utilisateur sur les messages. –

Questions connexes