В приложении, над которым я работаю, есть функция, которая соединяется с почтовым сервером через 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, заключается в том, что данное сообщение не будет обрабатываться повторно во втором проходе (т. Е. Обрабатывает только последние или новые сообщения).
У одного другого клиента Exchange Server 2007 была такая же проблема. Они «самостоятельно разрешили» проблему, удалив и воссоздав почтовый ящик, и указали на проблему обновления с 2003 по 2007 год. У этого другого клиента все еще есть проблема, несмотря на воссоздание почтового ящика. Ни один клиент, который в настоящее время не использует 2003, еще не пожаловался. – Avrom
Если я правильно понял Javadocs, если я правильно закрою почтовую папку и затем снова открою ее, последний флаг должен быть выключен для всех сообщений, которые были там в предыдущий раз, когда он был открыт. Если это так, это должно соответствовать моим потребностям. – Avrom
@Avrom: Это было бы моим пониманием. Закрытие и повторное открытие должны отмечать любые новые сообщения как ПОСЛЕДНИЕ. Но есть ли у вашего приложения только один доступ к папкам? Если нет, я подозреваю, что у вас возникнет проблема, если какое-либо другое приложение откроет/закрывает папку. Я сомневаюсь, что Exchange (или любой сервер IMAP) сохранит флаг «ПОСЛЕДНИЕ» только для вашего приложения. Если для вашего приложения важно знать, какие сообщения он обрабатывает, вам, вероятно, придется установить в сообщениях определенный пользователем флаг. –