0

У меня проблема с попыткой настроить почтовую службу Exchange Online для нового профиля с использованием Profman, вызвав запрос проверки подлинности, и задавался вопросом, сделал ли кто-нибудь подобное программное до и не могли ли они предоставить учетные данные/запретить показ подсказки?Предотвращение проверки подлинности при настройке нового профиля электронной почты Exchange Online с использованием Redemption

RDOSession profileSession = RedemptionLoader.new_RDOSession(); 

string proxy = String.Format("hknprd0204.outlook.com",machineName); 
string server = String.Format("hknprd0204.mailbox.outlook.com", machineName); 
string userName = "[email protected]"; 
string password = "[email protected]"; 

profileSession.Credentials.Add(proxy, userName, password, CredentialPersist: rdoCredentialPersist.cpWindowsLogonSession); 
profileSession.Credentials.Add(server, userName, password, CredentialPersist: rdoCredentialPersist.cpWindowsLogonSession); 

newProfile = profiles.Add("ExchangeOnline"); 
newProfile.GlobalProfSect.set_Item((int)Redemption.MAPITags.PR_INTERNET_CONTENT_ID, server); 
newProfile.GlobalProfSect.set_Item((int)Redemption.MAPITags.PR_DISPLAY_NAME, userName); 

var newService = newProfile.Services.Add("MSEMS", "Microsoft Exchange", false); 

ProfMan.PropertyBag properties = (ProfMan.PropertyBag)Activator.CreateInstance(Type.GetTypeFromProgID("ProfMan.PropertyBag")); 

properties.Add((int)Redemption.MAPITags.PR_INTERNET_CONTENT_ID, server); 
properties.Add((int)Redemption.MAPITags.PR_DISPLAY_NAME, userName); 
properties.Add((int)Redemption.MAPITags.PR_PROFILE_HOME_SERVER, server); 

properties.Add((int)Redemption.MAPITags.PR_PROFILE_UNRESOLVED_NAME, userName); 
properties.Add((int)Redemption.MAPITags.PR_PROFILE_UNRESOLVED_SERVER, server); 

properties.Add((int)Redemption.MAPITags.PR_ROH_FLAGS, 47); 
properties.Add((int)Redemption.MAPITags.PR_ROH_PROXY_AUTH_SCHEME, Constants.RedemptionPropertyTags.ROHAUTH_BASIC); 
properties.Add((int)Redemption.MAPITags.PR_ROH_PROXY_PRINCIPAL_NAME, "msstd:outlook.com"); 
properties.Add((int)Redemption.MAPITags.PR_ROH_PROXY_SERVER, proxy); 
properties.Add((int)Redemption.MAPITags.PR_PROFILE_CONFIG_FLAGS, Constants.RedemptionPropertyTags.CONFIG_OST_CACHE_PRIVATE); 

properties.Add((int)Redemption.MAPITags.PR_PROFILE_UI_STATE, 16640); 

newService.ProfSect.set_Item((int)Redemption.MAPITags.PR_INTERNET_CONTENT_ID, server); 

for (int i = 1; i <= newService.Providers.Count; i++) 
{ 
    ProfMan.IProvider provider = newService.Providers.get_Item(i); 
    switch (provider.ResourceType) 
    { 
     case 33:  //Microsoft Exchange Message Store todo: constants these 
      provider.ProfSect.set_Item((int)Redemption.MAPITags.PR_DISPLAY_NAME, userName); 
      provider.ProfSect.set_Item((int)Redemption.MAPITags.PR_INTERNET_CONTENT_ID, server); 
      provider.ProfSect.set_Item((int)Redemption.MAPITags.PR_PROFILE_SERVER, server); 
      provider.ProfSect.set_Item((int)Redemption.MAPITags.PR_PROFILE_DISPLAYNAME_SET, 1); 
      provider.ProfSect.set_Item((int)Redemption.MAPITags.PR_PROFILE_CONFIG_FLAGS, Constants.RedemptionPropertyTags.CONFIG_OST_CACHE_PRIVATE); 
      break; 
     case 35:  //Exchange Directory Service 
      provider.ProfSect.set_Item((int)Redemption.MAPITags.PR_INTERNET_CONTENT_ID, server); 
      provider.ProfSect.set_Item((int)Redemption.MAPITags.PR_PROFILE_CONFIG_FLAGS, Constants.RedemptionPropertyTags.CONFIG_OST_CACHE_PRIVATE); 
      break; 
     case 36:  //Exchange Transport 
      provider.ProfSect.set_Item((int)Redemption.MAPITags.PR_INTERNET_CONTENT_ID, server); 
      provider.ProfSect.set_Item((int)Redemption.MAPITags.PR_PROFILE_SERVER, server); 
      provider.ProfSect.set_Item((int)Redemption.MAPITags.PR_PROFILE_CONFIG_FLAGS, Constants.RedemptionPropertyTags.CONFIG_OST_CACHE_PRIVATE); 
      break; 
     default:  //0 = MSEMS   This is the provider that is causing the authentication prompt. 
      provider.ProfSect.set_Item((int)Redemption.MAPITags.PR_DISPLAY_NAME, userName); 
      provider.ProfSect.set_Item((int)Redemption.MAPITags.PR_INTERNET_CONTENT_ID, server); 
      provider.ProfSect.set_Item((int)Redemption.MAPITags.PR_PROFILE_HOME_SERVER, server); 
      provider.ProfSect.set_Item((int)Redemption.MAPITags.PR_PROFILE_UNRESOLVED_NAME, userName); 
      provider.ProfSect.set_Item((int)Redemption.MAPITags.PR_PROFILE_UNRESOLVED_SERVER, server); 
      provider.ProfSect.set_Item((int)Redemption.MAPITags.PR_ROH_PROXY_PRINCIPAL_NAME, "msstd:outlook.com"); 
      provider.ProfSect.set_Item((int)Redemption.MAPITags.PR_ROH_PROXY_SERVER, proxy); 
      provider.ProfSect.set_Item((int)Redemption.MAPITags.PR_ROH_PROXY_AUTH_SCHEME, Constants.RedemptionPropertyTags.ROHAUTH_BASIC); 
      provider.ProfSect.set_Item((int)Redemption.MAPITags.PR_ROH_FLAGS, 
        Constants.RedemptionPropertyTags.ROHFLAGS_USE_ROH + 
        Constants.RedemptionPropertyTags.ROHFLAGS_SSL_ONLY + 
        Constants.RedemptionPropertyTags.ROHFLAGS_MUTUAL_AUTH + 
        Constants.RedemptionPropertyTags.ROHFLAGS_HTTP_FIRST_ON_SLOW + 
        Constants.RedemptionPropertyTags.ROHFLAGS_HTTP_FIRST_ON_FAST); 
      provider.ProfSect.set_Item((int)Redemption.MAPITags.PR_PROFILE_CONFIG_FLAGS, Constants.RedemptionPropertyTags.CONFIG_OST_CACHE_PRIVATE); 
      break; 
    } 
} 

newService.Configure(0, 0, properties); //Prompts for authentication (and if credentials not cached in resultant prompt, when attempting to access the RDOStore later causes errors) 

Кроме того, в описанной выше коде, если я пытаюсь открыть RDOStore за счет до открытия в Outlook, или без кэширования учетных данных в строке, генерируется исключение о том, что .OST не является допустимым магазин.

До сих пор я пытался:

  • добавления учетных данных к RDOSession (как вы можете видеть в примере кода выше)
  • добавление учетных данных вручную в Диспетчер учетных данных Windows до запуска этот код (который затем все еще запрашивает учетные данные при вызове .Configure()).

Любые советы или идеи были бы высоко оценены!

+0

Читать комментарии Стивена Гриффина [здесь] (http://blogs.msdn.com/b/stephen_griffin/archive/2009/08/11/auth-and-check-names.aspx) – pcunite

ответ

0

Перспектива использует кэш учетных данных, вы можете получить доступ к нему с помощью RDOSession.Credentials и предварительного заполнения учетных данных: http://www.dimastr.com/redemption/rdocredentials.htm Убедитесь, что вы указали cpWindowsLogonSession, чтобы сделать его видимым для Outlook (не только Redemption).

+0

Привет, Дмитрий, создание и ведение журнала в RDOSession, похоже, все еще запрашивает учетные данные: я поместил следующий код после профилей .Add («MyNewProfile»): RDOSession session = RedemptionLoader.new_RDosession(); session.Credentials.Add ("*. onmicrosoft.com", имя пользователя, пароль, rdoCredentialType.ctGeneric, rdoCredentialPersist.cpWindowsLogonSession); session.Credentials.Add ("*. Outlook.com", userName, password, rdoCredentialType.ctGeneric, rdoCredentialPersist.cpWindowsLogonSession); И все еще запрашивает учетные данные на newService.Configure() ... –

+0

Глядя на образец на http://www.dimastr.com/redemption/profiles.htm, а также для создания нового профиля и добавления обмена сервер к нему, есть комментарий, говорящий: «Примечание: диалог входа в домен всегда будет отображаться « если вы еще не вошли в тот же домен »- значит, это означает, что Profman.Service.Configure() работает только с учетными данными домена ? (и, наконец, при запросе учетных данных с моим исходным кодом выше, открытие RDOStore вызывает MAPI_E_UNCONFIGURED, если я не проверю «сохранить мой пароль» или не открою его с помощью внешнего вида перед его использованием) –

 Смежные вопросы

  • Нет связанных вопросов^_^