2009-06-26 2 views
1

В приложении, над которым я работаю, есть функция, которая соединяется с почтовым сервером через IMAP с помощью JavaMail. Один из наших клиентов имеют следующую трассировку стеки:Проблема с 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].setFlag(Flags.Flag.RECENT, false); 

Где messages[i] является javax.mail.Message.

Эта ошибка никогда не возникала для любого из наших клиентов, использующих Exchange Server 2003, и поскольку этот клиент использует Exchange Server 2007, я полагаю, что это имеет какое-то отношение к нему (ошибка?). Я также убедился, что они обновили его до последнего обновления и обновления накопительного пакета обновления (обновление Service Pack 1 на момент написания этой статьи) и последней версии JavaMail (1.4.2 на момент написания этой статьи), и это не повлияло. Мой вопрос: это что-то, что я должен ждать, пока Microsoft исправит? Есть ли обходной путь, который я могу использовать?

Для записи причина, по которой я устанавливаю флаг последнего значения false, заключается в том, что данное сообщение не будет обрабатываться повторно во втором проходе (т. Е. Обрабатывает только последние или новые сообщения).

ответ

1

Мое чтение API для Flags.Flag.RECENT указывает, что оно доступно только для чтения из клиентского приложения. Реализация папки должна установить ее, когда «сообщение является новым для этой папки». Поэтому, если вы не пишете реализацию Папки, вы не должны изменять этот флаг.

Это заставляет задуматься, почему ваши другие клиенты не получают ошибку. Возможно, в некоторых случаях это рассматривается как NOOP? Возможно, есть что-то особенное в папке этого конкретного клиента? Возможно, общая папка или папка, к которой пользователь имеет доступ для чтения? Я не способен размышлять о тайнах хранилища сообщений Exchange.

+0

У одного другого клиента Exchange Server 2007 была такая же проблема. Они «самостоятельно разрешили» проблему, удалив и воссоздав почтовый ящик, и указали на проблему обновления с 2003 по 2007 год. У этого другого клиента все еще есть проблема, несмотря на воссоздание почтового ящика. Ни один клиент, который в настоящее время не использует 2003, еще не пожаловался. – Avrom

+0

Если я правильно понял Javadocs, если я правильно закрою почтовую папку и затем снова открою ее, последний флаг должен быть выключен для всех сообщений, которые были там в предыдущий раз, когда он был открыт. Если это так, это должно соответствовать моим потребностям. – Avrom

+0

@Avrom: Это было бы моим пониманием. Закрытие и повторное открытие должны отмечать любые новые сообщения как ПОСЛЕДНИЕ. Но есть ли у вашего приложения только один доступ к папкам? Если нет, я подозреваю, что у вас возникнет проблема, если какое-либо другое приложение откроет/закрывает папку. Я сомневаюсь, что Exchange (или любой сервер IMAP) сохранит флаг «ПОСЛЕДНИЕ» только для вашего приложения. Если для вашего приложения важно знать, какие сообщения он обрабатывает, вам, вероятно, придется установить в сообщениях определенный пользователем флаг. –

 Смежные вопросы

  • Нет связанных вопросов^_^