У меня проблема с попыткой настроить почтовую службу 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()).
Любые советы или идеи были бы высоко оценены!
Читать комментарии Стивена Гриффина [здесь] (http://blogs.msdn.com/b/stephen_griffin/archive/2009/08/11/auth-and-check-names.aspx) – pcunite