Я конвертирую существующий фрагмент кода с помощью Redemption (библиотека MS Exchange) для работы под учетной записью службы. Проблема, с которой я столкнулся, заключается в том, что я не могу искать почтовые папки, как раньше.
Первое препятствие при переходе на сервисный аккаунт было преодолено путем переключения
_rdoSession.Logon() // <- Which uses the account’s MAPI profile, and throws an exception under a service account
To:
_rdoSession.LogonExchangeMailbox("", "mailserver.example.com");
Проблема возникает при попытке доступа к определенным папкам. Раньше я мог использовать:
_session.GetFolderFromPath("\\\\Mailbox - Example shared mailbox\\Inbox\\FolderOne");
_session.GetFolderFromPath("\\\\Mailbox - Example shared mailbox\\Inbox\\FolderTwo");
Под сервисным аккаунтом я не могу обращаться к общим почтовым аккаунтам с таким же синтаксисом, так как получаю сообщение об ошибке:
Could not open store "Mailbox – Example shared mailbox": Error in IMAPITable.FindRow: MAPI_E_NOT_FOUND
Некоторые поисковые запросы в Google показали, что первым шагом является использование:
_session.Stores.GetSharedMailbox("Example shared mailbox ")
Я проверил, что это возвращает правильный объект общего почтового ящика.
Однако - оттуда методов поиска нет. Я могу попытать счастья в создании нового кода для навигации по структуре папок с помощью свойства .RootFolder, но это похоже на взлом.
Как мне получить доступ к определенным папкам в общем почтовом ящике, запущенном под учетной записью службы в Redemption?