Я недавно кодировал консольное приложение .NET, используя C #. Его целью было прочитать электронные письма в определенной папке, проанализировать их на предмет определенных значений и сохранить их в базе данных.
Нашей почтовой системой в то время, когда я изначально ее кодировал, был Exchange 2003. Однако я знал, что скоро мы перейдем на Exchange 2010: э-э, я создал код для работы в обеих средах.
Однако после перехода на Exchange 2010 приложение не работает.
Приложение использует API-интерфейс EWS для 2010 года. Когда он пытается использовать метод FindFolders ExchangeService для поиска publicfoldersroot, он выдает исключение. Вот код:
ExchangeService service = new ExchangeService();
FindFoldersResults findRootFldrs;
service.UseDefaultCredentials = true;
service.AutodiscoverUrl("xxxxx@xxxx.xxx", delegate(string x) {
return true; });
FolderView fview = new FolderView(100);
fview.Traversal = FolderTraversal.Deep;
findRootFldrs = service.FindFolders(WellKnownFolderName.PublicFoldersRoot,
fview);
Исключение: ErrorInvalidSchemaVersionForMailboxVersion
, он же:
Почтовый ящик, который был запрошен, не поддерживает указанный RequestServerVersion
Я пытался:
Установка службы обмена на 2007 (выдает исключение: «Произошла внутренняя ошибка сервера. Операция не удалась.»)
Предоставление самого высокого уровня доступа к публичной папке (без эффекта)
Установка учетных данных вручную (без эффекта)
Я могу просматривать общие папки в Outlook 2007; свойство publicfoldersroot доступно в intellisense; код работает на локальных папках (я могу разобрать входящие).
В настоящее время я думаю, что это настройка недавней установки Exchange 2010: к сожалению, это не совсем моя область. Исключение говорит мне, что он пытается использовать предыдущую версию Exchange. Установка его на 2007 просто приводит к сбою кода с внутренней ошибкой сервера.