protected override void InternalStateReset() { if (string.IsNullOrEmpty(this.Name) && string.IsNullOrEmpty(this.DisplayName)) { base.WriteError(new RecipientTaskException(Strings.ErrorNewTeamMailboxParameter), ExchangeErrorCategory.Client, null); } IList <TeamMailboxProvisioningPolicy> teamMailboxPolicies = this.GetTeamMailboxPolicies(); if (teamMailboxPolicies == null || teamMailboxPolicies.Count == 0) { base.WriteError(new RecipientTaskException(Strings.ErrorTeamMailboxCanNotLoadPolicy), ExchangeErrorCategory.Client, null); } this.provisioningPolicy = teamMailboxPolicies[0]; if (string.IsNullOrEmpty(this.Name)) { string prefix = null; if (!string.IsNullOrEmpty(this.provisioningPolicy.AliasPrefix)) { prefix = this.provisioningPolicy.AliasPrefix; } else if (this.provisioningPolicy.DefaultAliasPrefixEnabled) { prefix = (Datacenter.IsMicrosoftHostedOnly(true) ? "SMO-" : "SM-"); } this.Name = TeamMailboxHelper.GenerateUniqueAliasForSiteMailbox(base.TenantGlobalCatalogSession, base.CurrentOrganizationId, this.DisplayName, prefix, Datacenter.IsMicrosoftHostedOnly(true), new Task.TaskVerboseLoggingDelegate(base.WriteVerbose), new Task.ErrorLoggerDelegate(base.WriteError)); } if (Datacenter.IsMicrosoftHostedOnly(true)) { SiteMailboxAddressesTemplate siteMailboxAddressesTemplate = null; try { siteMailboxAddressesTemplate = SiteMailboxAddressesTemplate.GetSiteMailboxAddressesTemplate(this.ConfigurationSession, base.ProvisioningCache); } catch (ErrorSiteMailboxCannotLoadAddressTemplateException exception) { base.WriteError(exception, ExchangeErrorCategory.Client, null); } base.UserPrincipalName = RecipientTaskHelper.GenerateUniqueUserPrincipalName(base.TenantGlobalCatalogSession, this.Name, siteMailboxAddressesTemplate.UserPrincipalNameDomain, new Task.TaskVerboseLoggingDelegate(base.WriteVerbose)); base.UserSpecifiedParameters["SpecificAddressTemplates"] = siteMailboxAddressesTemplate.AddressTemplates; } base.InternalStateReset(); }
public static SiteMailboxAddressesTemplate GetSiteMailboxAddressesTemplate(IConfigurationSession cfgSession, ProvisioningCache provisioningCache) { if (cfgSession == null) { throw new ArgumentNullException("cfgSession"); } if (provisioningCache == null) { throw new ArgumentNullException("provisioningCache"); } OrganizationId orgId = cfgSession.GetOrgContainer().OrganizationId; return(provisioningCache.TryAddAndGetOrganizationData <SiteMailboxAddressesTemplate>(CannedProvisioningCacheKeys.OrganizationSiteMailboxAddressesTemplate, orgId, delegate() { ADObjectId rootId = orgId.ConfigurationUnit ?? provisioningCache.TryAddAndGetGlobalData <ADObjectId>(CannedProvisioningCacheKeys.FirstOrgContainerId, () => cfgSession.GetOrgContainerId()); MultiValuedProperty <SmtpDomain> multiValuedProperty = null; ADPagedReader <OnPremisesOrganization> adpagedReader = cfgSession.FindPaged <OnPremisesOrganization>(rootId, QueryScope.SubTree, null, null, 0); using (IEnumerator <OnPremisesOrganization> enumerator = adpagedReader.GetEnumerator()) { if (enumerator.MoveNext()) { OnPremisesOrganization onPremisesOrganization = enumerator.Current; multiValuedProperty = onPremisesOrganization.HybridDomains; } } QueryFilter filter = new NotFilter(new BitMaskAndFilter(AcceptedDomainSchema.AcceptedDomainFlags, 1UL)); ADPagedReader <AcceptedDomain> adpagedReader2 = cfgSession.FindPaged <AcceptedDomain>(rootId, QueryScope.SubTree, filter, new SortBy(ADObjectSchema.Name, SortOrder.Ascending), 0); bool flag = false; string text = string.Empty; string text2 = string.Empty; string text3 = string.Empty; foreach (AcceptedDomain acceptedDomain in adpagedReader2) { if (acceptedDomain.AuthenticationType != AuthenticationType.Federated && (string.IsNullOrEmpty(text) || acceptedDomain.Default)) { text = acceptedDomain.DomainName.Domain; } if ((multiValuedProperty == null || multiValuedProperty.Count == 0 || multiValuedProperty.Contains(acceptedDomain.DomainName.SmtpDomain)) && (string.IsNullOrEmpty(text2) || acceptedDomain.Default)) { text2 = acceptedDomain.DomainName.Domain; } if (acceptedDomain.IsCoexistenceDomain && string.IsNullOrEmpty(text3)) { text3 = acceptedDomain.DomainName.Domain; } flag = (flag || acceptedDomain.Default); if (flag && !string.IsNullOrEmpty(text) && !string.IsNullOrEmpty(text2) && !string.IsNullOrEmpty(text3)) { break; } } SiteMailboxAddressesTemplate siteMailboxAddressesTemplate = new SiteMailboxAddressesTemplate(); siteMailboxAddressesTemplate.UserPrincipalNameDomain = text; if (!string.IsNullOrEmpty(text2)) { siteMailboxAddressesTemplate.AddressTemplates.Add(new SmtpProxyAddressTemplate(string.Format("@{0}", text2), true)); if (!string.IsNullOrEmpty(text3) && !string.Equals(text2, text3, StringComparison.OrdinalIgnoreCase)) { siteMailboxAddressesTemplate.AddressTemplates.Add(new SmtpProxyAddressTemplate(string.Format("@{0}", text3), false)); } } if (!siteMailboxAddressesTemplate.IsValid) { throw new ErrorSiteMailboxCannotLoadAddressTemplateException(); } return siteMailboxAddressesTemplate; })); }