Использование Redemption (RDO) больше не может изменять контактные элементы почтового ящика других пользователей

У меня есть программа, работающая под учетной записью администратора, который является опытным пользователем с правами на запись в другие почтовые ящики Exchange. Используя старый сервер Exchange 2003 (имя изменено для наглядности), я смог:

session.LogonExchangeMailbox(usrEmail,"old.Exchange2003.com");

и внести изменения в контакты пользователя.

После миграции на новый сервер Exchange 2010 (имя изменено) никакие изменения не отражаются в почтовом ящике пользователя.

session.LogonExchangeMailbox(usrEmail, "new.Exchange2010.com")

НИ

session.LogonExchangeMailbox(UserPrincipal.Current.EmailAddress, "new.Exchange2010.com");
session.GetSharedMailbox(usrEmail);

//followed by attempts to change the user's contacts.

Чего не хватает? Буду признателен за любые идеи, помогающие решить эту проблему. Спасибо!


person Miha    schedule 21.04.2016    source источник
comment
Итак, какой метод ошибается или ведет себя неожиданно? Вы говорите, что изменение объекта RDOContactItem и последующий вызов RDOContactItem.Save не сохраняет изменения?   -  person Dmitry Streblechenko    schedule 21.04.2016
comment
Если я попытаюсь войти в систему, используя старый сервер Exchange 2003, я получаю: System.Runtime.InteropServices.COMException was catch HResult=-2147221219 Message=Error in IMAPISession::OpenMsgStore: MAPI_E_FAILONEPROVIDER При использовании нового сервера Exchange 2010 ошибки нет, но после того, как я сохраню эти контакты, они не появятся в почтовом ящике пользователя.   -  person Miha    schedule 21.04.2016
comment
Пожалуйста, покажите свой код, который открывает, изменяет и сохраняет контакты.   -  person Dmitry Streblechenko    schedule 21.04.2016
comment
@Dmitry Streblechenko Контакты RDOFolder = session.GetDefaultFolder(rdoDefaultFolders.olFolderContacts); Папки RDOFolders = контакты.Папки; Подпапка RDOFolder = папки[Контакты CRM]; Элементы RDOItems = подпапка.Элементы; RDOMail msg = items.Add(IPM.Contact.NewCRMContactForm); RDOContactItem rci = (RDOContactItem)msg;   -  person Miha    schedule 22.04.2016
comment
Элементы RDOItems = подпапка.Элементы; rci.Сохранить(); Marshal.ReleaseComObject(rci); Marshal.ReleaseComObject(msg); Marshal.ReleaseComObject(предметы); Marshal.ReleaseComObject(подпапка); Marshal.ReleaseComObject(папки); Marshal.ReleaseComObject(контакты); RDOMail msg = items.Add(IPM.Contact.NewCRMContactForm); RDOContactItem rci = (RDOContactItem)msg;   -  person Miha    schedule 22.04.2016
comment
@Dmitry Streblechenko: Часть кода, создающая и сохраняющая контакты, работает нормально. Проблема в том, что контакты не отображаются в почтовом ящике другого пользователя. Они отображаются нормально, если я сохраняю их в учетной записи администратора.   -  person Miha    schedule 22.04.2016
comment
Еще одна подсказка: доступ к почтовому ящику в 2010 отличается, поскольку вы проходите через сервер CAS. Что это значит?   -  person Miha    schedule 22.04.2016
comment
Ну, вы всегда открываете папку «Контакты» по умолчанию (RDOSession.GetDefaultFolder) и ее подпапку. Почему вы ожидаете, что контакты появятся в каком-то другом почтовом ящике?   -  person Dmitry Streblechenko    schedule 22.04.2016
comment
@Dmitry Streblechenko: потому что в этом весь смысл использования Redemption с моей программой, которая работает под опытным пользователем. Программа входит в почтовый ящик Exchange другого пользователя и создает там контакты на основе некоторых значений из базы данных.   -  person Miha    schedule 22.04.2016
comment
@Dmitry Streblechenko: другими словами, пользователь-администратор имеет адрес электронной почты UserPrincipal.Current.EmailAddress, и я пытаюсь войти на сервер Exchange в почтовый ящик другого пользователя, используя другой действительный указанный адрес электронной почты пользователя в том же домене.   -  person Miha    schedule 22.04.2016
comment
Значит, вы вызываете LogonHostedExchangeMailbox, указывая разные SMTP-адреса для первого и второго параметров?   -  person Dmitry Streblechenko    schedule 22.04.2016
comment
@Дмитрий Стреблеченко: ДА! Предлагаемое вами решение для использования LogonHostedExchangeMailbox работает. Большое спасибо! Пожалуйста, предоставьте свой последний комментарий в качестве ответа. Я буду более чем рад принять его!   -  person Miha    schedule 22.04.2016
comment
@Dmitry Streblechenko: на самом деле использование LogonHostedExchangeMailbox работало частично. Когда я запускаю его, он регистрируется у себя, он записывается в мой почтовый ящик. Когда я попытался запустить его под учетной записью администратора и написать в свой почтовый ящик, это не сработало.   -  person Miha    schedule 22.04.2016
comment
При использовании Redemption и Exchange Server 2010, каковы предпосылки для того, чтобы программное обеспечение, работающее под учетной записью Active Directory A, могло записывать в контакты почтового ящика другой учетной записи B? Обе учетные записи A и B находятся в одном домене.   -  person Miha    schedule 22.04.2016
comment
Если вы используете LogonHostedExchangeMailbox, вы можете перемещаться между доменами, если у вас есть хорошие учетные данные.   -  person Dmitry Streblechenko    schedule 22.04.2016
comment
@Dmitry Streblechenko: LogonHostedExchangeMailbox должен работать, когда я предоставляю SMPTEmail пользователя B, но учетные данные опытного пользователя A? Существуют ли какие-либо настройки на стороне сервера Exchange 2010, позволяющие пользователю A писать в почтовый ящик пользователя B?   -  person Miha    schedule 22.04.2016
comment
Да, если пользователь A имеет право на отправку/получение от имени почтового ящика B, вы сможете войти в систему, используя учетные данные пользователя A. Или вы можете войти в почтовый ящик пользователя A, а затем использовать RDOSession.GetSharedMailbox(UserB)   -  person Dmitry Streblechenko    schedule 22.04.2016


Ответы (1)


Боюсь, решение связано с использованием управляемого API EWS.

person Miha    schedule 22.04.2016