Какой самый прямой способ получить объект Active Directory для данного пользователя MAPI / Exchange? - PullRequest
1 голос
/ 22 августа 2011

Я пытаюсь запросить атрибуты Active Directory получателя MAPI из COM-надстройки Outlook. Это первый раз, когда я имею дело с запросами AD, и единственный способ, который я выяснил до сих пор, не кажется полностью идеальным, поэтому было бы здорово, если бы кто-то с немного большим опытом включился, прежде чем я продолжу и реализую этот подход .

Итак, вот что я придумала:

  1. Считать значение свойства PR_EMAIL_ADDRESS_W MAPI получателя.
  2. Используйте IDirectorySearch, чтобы найти запись LDAP, атрибут legacyExchangeDN которой соответствует этому значению.

Это кажется достаточно простым, и доказательство концепции работает, но:

  • У меня уже есть уникальный идентификатор - почему я должен выполнять поиск ? Не должно быть какого-либо способа прямого доступа к объекту пользователя AD, например, каким-то образом используя имеющуюся у меня информацию о получателе, чтобы создать LDAP-путь, который я могу просто передать ADsGetObject()?
  • Термин «наследие» в имени атрибута подразумевает, что это не может быть хорошей долгосрочной стратегией.
  • В приведенном выше списке фактически отсутствует шаг: прежде чем я смогу использовать IDirectorySearch, мне нужно определить корневой контейнер для поиска. Прямо сейчас я запрашиваю "LDAP://rootDSE", а затем запрашиваю атрибут "defaultNamingContext", чтобы сформулировать новый запрос. Это универсально безопасно? Например, будет ли это работать, когда узел Outlook 2010 моего надстройки подключен к нескольким различным серверам Exchange, а получатель, которого мне нужно запросить, не с сервера по умолчанию?

FWIW, я использую превосходную библиотеку Redemption для доступа к слою Extended MAPI, так что на самом деле я работаю не с IMailUser, а с IAddressEntry. Так что, если есть лучший способ сделать то, что я пытаюсь сделать, встроенный в эту библиотеку, не стесняйтесь предлагать и это.

1 Ответ

1 голос
/ 23 августа 2011

Там внутри много вопросов, но здесь идет.

В целом ваша концепция и поток верны. Вы должны помнить, что Active Directory и Exchange - это две разные системы. Они тесно интегрированы, но вам все равно нужно искать AD, чтобы найти их аккаунт. Это не помогает тому, что MAPI предшествует Active Directory и плохо устарел в этом мире управляемых фреймворков, поэтому, если в Redemption не будет чего-то встроенного, чтобы получить пользователя AD для вас, вы сами.

Ааа, legacyExchangeDN. Похоже, что-то лучше на пути, верно? Нет Это свойство было главной связью между учетной записью AD и почтовым ящиком Exchange с Windows 2000, когда впервые был выпущен Active Directory. Это лучший способ найти пользователя почтового ящика в Active Directory. Это безопасно для использования.

Ваш последний пункт пули достаточно сложен, чтобы быть его собственным вопросом. Для 95% всех установок Exchange и Active Directory то, как вы это делаете, прекрасно, если вы используете надстройку на месте или через VPN. Но остальные 5% очень сложны. Вы можете сделать несколько сумасшедших настроек с Exchange, начиная от разных доменов и заканчивая разными лесами, а также в размещенных средах Exchange. Честно говоря, если вам нужно иметь возможность запрашивать AD из любой конфигурации, я бы задал это как собственный вопрос.

В конце концов, вы, вероятно, подойдете для большинства ситуаций в корпоративных сетях. Размещенный Exchange вызовет проблемы, потому что вы обычно не можете получить доступ к резервной копии Active Directory.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...