Настройка почтовых ящиков сайта в SharePoint Server
**Применимо к:**Exchange Server, SharePoint Server 2013, SharePoint Server 2016
**Последнее изменение раздела:**2017-09-19
Сводка. Настройка Exchange Server, SharePoint Server 2016 и SharePoint Server 2013 для электронной почты группы с помощью компонента почтовых ящиков сайта.
В этой статье описано, как настроить компонент почтовых ящиков сайта в SharePoint Server и Exchange Server. Этот компонент предоставляет пользователям SharePoint Server электронную почту группы на сайте и содержит ссылки на библиотеки документов SharePoint в Microsoft Outlook, позволяя пользователям обмениваться файлами и электронными сообщениями с другими членами группы, работающими над совместным проектом.
Перед началом работы
Перед началом этой операции просмотрите следующие сведения о требованиях.
Для компонента почтовых ящиков сайта требуется Exchange Server 2016 или Exchange Server 2013.
Предыдущие версии веб-служб Exchange необходимо удалить с серверов SharePoint.
Примечание
Вам может потребоваться определить, установлена ли предыдущая версия EWS. Для этого выполните скрипт Check-SiteMailboxConfig, приведенный ниже.
Компонент почтовых ящиков сайта требует, чтобы в ферме была настроена синхронизация профилей пользователей. Сведения о настройке синхронизации профилей пользователей см. в разделах Планирование профилей и удостоверений пользователей и Управление синхронизацией профилей пользователей в SharePoint Server.
Компонент почтовых ящиков сайта требует, чтобы в ферме было настроено приложение-служба управления приложениями. Сведения о настройке приложения-службы управления приложениями см. в разделе New-SPAppManagementServiceApplication.
Для веб-приложений, развернутых согласно сценариям, поддерживающим проверку подлинности между серверами и проверку подлинности приложений, требуется настройка протокола SSL для зоны по умолчанию. В этой статье идет речь именно о таком сценарии. Чтобы можно было настроить компонент почтовых ящиков сайта, на компьютере с SharePoint Server должно быть настроено использование SSL. Просмотрите дополнительные сведения в статье Создание веб-приложений, основанных на утверждениях, в SharePoint 2013, а затем выполните действия для создания семейства веб-сайтов SSL и сертификата сервера.
Примечание
Вам может потребоваться импортировать SSL-сертификат Exchange Server из Exchange Server в SharePoint Server, а также из SharePoint Server в Exchange Server. Это необходимо, только если сертификат не является доверенным для конечных точек API (например, самозаверяющий SSL-сертификат в лабораторной среде).
Импорт недоверенного SSL-сертификата на новый сервер-
Откройте Internet Explorer и перейдите в Outlook Web App (если развертывание выполнено на сервере SharePoint Server) или на SSL-сайт SharePoint (если развертывание выполнено на сервере Exchange Server). Вот адрес: https://<Имя_сервера_Exchange_Server>/owa или https://<FQDN_SharePoint>.
-
Подтвердите доверие для сертификата, щелкнув Перейти на веб-сайт.
-
Щелкните сведения Ошибка сертификата в Internet Explorer рядом со строкой адреса, а затем выберите Просмотр сертификатов.
-
Выберите Установить сертификат, а затем — Поместить все сертификаты в следующее хранилище.
-
Установите флажок, чтобы открыть список физических хранилищ.
-
Установите сертификат в "Доверенные корневые центры сертификации > Локальный компьютер".
-
Для выполнения этих процедур необходимо входить в группу администраторов SharePoint и Exchange Server, а также необходим работающий Exchange Server с почтовыми ящиками конечных пользователей.
Решение для резервного копирования SharePoint не применяется к почтовым ящикам сайта Exchange. Администратору Exchange необходимо будет обеспечить своевременное резервное копирование почтовых ящиков сайта.
В браузерах пользователей, обращающихся к файлам в библиотеке документов SharePoint из почтового ящика сайта, эта библиотека документов должна быть настроена в качестве надежного сайта, либо появится предупреждение, предлагающее пользователю подтвердить доверие для этого файла.
Настройка SharePoint для компонента почтовых ящиков сайтов в SharePoint Server
Первый этап настройки компонента почтовых ящиков сайта — установка API веб-служб Exchange Server на каждом сервере приложений и веб-сервере в ферме SharePoint Server.
Установка API веб-служб Exchange для SharePoint Server
Скачайте файл EWSManagedAPI.msi в Центре загрузки Майкрософт и сохраните его в папке на каждом веб-сервере и сервере приложений.
Откройте окно командной строки от имени администратора и перейдите к папке, в которой сохранен файл EWSManagedAPI.msi.
Выполните следующую команду:
msiexec /I EwsManagedApi.msi addlocal="ExchangeWebServicesApi_Feature,ExchangeWebServicesApi_Gac"
Перезапустите IIS из командной строки, введя IISReset.
Установка доверия OAuth и разрешений для службы в SharePoint Server
Далее необходимо скопировать следующие два сценария. Первый следует сохранить под именем Set-SiteMailboxConfig.ps1, а второй — под именем Check-SiteMailboxConfig.ps1.
Set-SiteMailboxConfig.ps1:
# .SYNOPSIS
# Set-SiteMailboxConfig helps configure Site Mailboxes for a SharePoint farm
# .DESCRIPTION
# Establishes trust with an Exchange Server, sets Site Mailbox settings and enables Site Mailboxes for a farm.
# .PARAMETER ExchangeSiteMailboxDomain
# The FQDN of the Exchange Organization where Site Mailboxes will be created
# .PARAMETER ExchangeAutodiscoverDomain
# [Optional] The FQDN of an Exchange Autodiscover Virtual Directory
# .PARAMETER WebApplicationUrl
# [Optional] The URL of a specific web application to configure. If not specified all Web Applications will be configured
# .PARAMETER Force
# [Optional] Indicate that the script should ignore any configuration issues and enable Site Mailboxes anyway
Param
(
[Parameter(Mandatory=$true)]
[ValidateNotNullOrEmpty()]
[string]$ExchangeSiteMailboxDomain,
[Parameter(Mandatory=$false)]
[ValidateNotNullOrEmpty()]
[string]$ExchangeAutodiscoverDomain,
[Parameter(Mandatory=$false)]
[ValidateNotNullOrEmpty()]
[string]$WebApplicationUrl,
[Parameter(Mandatory=$false)]
[switch]$Force
)
$script:currentDirectory = Split-Path $MyInvocation.MyCommand.Path
if($WebApplicationUrl -ne $NULL -and $WebApplicationUrl -ne "")
{
$webapps = Get-SPWebApplication $WebApplicationUrl
}
else
{
$webapps = Get-SPWebApplication
}
if($webapps -eq $NULL)
{
if($WebApplicationUrl -ne $NULL)
{
Write-Warning "No Web Application Found at $($WebApplicationUrl). Please create a web application and re-run Set-SiteMailboxConfig"
}
else
{
Write-Warning "No Web Applications Found. Please create a web application and re-run Set-SiteMailboxConfig"
}
return
}
$rootWeb = $NULL
foreach($webapp in $webapps)
{
if($rootWeb -eq $NULL)
{
$rootWeb = Get-SPWeb $webApp.Url -EA SilentlyContinue
}
}
if($rootWeb -eq $NULL)
{
Write-Warning "Unable to find a root site collection. Please create a root site collection on a web application and re-run Set-SiteMailboxConfig"
return
}
$exchangeServer = $ExchangeAutodiscoverDomain
if($exchangeServer -eq $NULL -or $exchangeServer -eq "")
{
$exchangeServer = "autodiscover.$($ExchangeSiteMailboxDomain)"
}
Write-Host "Establishing Trust with Exchange Server: $($exchangeServer)"
$metadataEndpoint = "https://$($exchangeServer)/autodiscover/metadata/json/1"
$exchange = Get-SPTrustedSecurityTokenIssuer | Where-Object { $_.MetadataEndpoint -eq $metadataEndpoint }
if($exchange -eq $NULL)
{
$exchange = New-SPTrustedSecurityTokenIssuer -Name $exchangeServer -MetadataEndPoint $metadataEndpoint
}
if($exchange -eq $NULL)
{
Write-Warning "Unable to establish trust with Exchange Server $($exchangeServer). Ensure that $($metadataEndpoint) is accessible."
if($ExchangeAutodiscoverDomain -eq $NULL -or $ExchangeAutodiscoverDomain -eq "")
{
Write-Warning "If $($metadataEndpoint) does not exist you may specify an alternate FQDN using ExchangeAutodiscoverDomain."
}
return
}
Write-Host "Granting Permissions to Exchange Server: $($exchangeServer)"
$appPrincipal = Get-SPAppPrincipal -Site $rootWeb.Url -NameIdentifier $exchange.NameId
Set-SPAppPrincipalPermission -AppPrincipal $appPrincipal -Site $rootWeb -Scope SiteSubscription -Right FullControl -EnableAppOnlyPolicy
Write-Host
Write-Host
Write-Host "Verifying Site Mailbox Configuration"
$warnings = & $script:currentDirectory\Check-SiteMailboxConfig.ps1 -ReturnWarningState
if($warnings -and -not $Force)
{
Write-Warning "Pre-requisites not satisfied. Stopping Set-SiteMailboxConfig. Use -Force to override"
return
}
elseif($warnings)
{
Write-Warning "Pre-requisites not satisfied. -Force used to override"
}
foreach($webapp in $webapps)
{
Write-Host "Configuring Web Application: $($webapp.Url)"
Write-Host "Setting Exchange Site Mailbox Domain to $($ExchangeSiteMailboxDomain)"
$webapp.Properties["ExchangeTeamMailboxDomain"] = $ExchangeSiteMailboxDomain
if($ExchangeAutodiscoverDomain -ne $NULL -and $ExchangeAutodiscoverDomain -ne "")
{
Write-Host "Setting Exchange Autodiscover Domain to $($ExchangeAutodiscoverDomain)"
$webapp.Properties["ExchangeAutodiscoverDomain"] = $ExchangeAutodiscoverDomain;
}
$webapp.Update()
}
$feature = Get-SPFeature CollaborationMailboxFarm -Farm -ErrorAction Ignore
if($feature -eq $NULL)
{
Write-Host "Enabling Site Mailboxes for Farm"
Enable-SPFeature CollaborationMailboxFarm
}
else
{
Write-Host "Site Mailboxes already enabled for Farm"
}
Check-SiteMailboxConfig.ps1:
Param
(
[Parameter(Mandatory=$false)]
[ValidateNotNullOrEmpty()]
[switch]$ReturnWarningState
)
Add-PSSnapin Microsoft.SharePoint.Powershell
$anyWarnings = $false
Write-Host "Step 1: Checking for Exchange Web Services"
try
{
$assm = [System.Reflection.Assembly]::Load("Microsoft.Exchange.WebServices, Version=15.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35")
if($assm.GlobalAssemblyCache)
{
Write-Host -Foreground Green "Found Exchange Web Services in Global Assembly Cache"
Write-Host "Exchange Web Services Version: $([System.Diagnostics.FileVersionInfo]::GetVersionInfo($assm.Location).FileVersion)"
}
else
{
Write-Warning "Unable to find Exchange Web Services in Global Assembly Cache"
$anyWarnings = $true
}
}
catch
{
Write-Warning "Unable to find Exchange Web Services in Global Assembly Cache"
$anyWarnings = $true
}
Write-Host
Write-Host
Write-Host "Step 2: Checking for https web application"
$webapps = Get-SPWebApplication -EA SilentlyContinue
$rootWeb = $NULL
if($webapps -ne $NULL)
{
$sslWebAppExists = $false
foreach($webapp in $webapps)
{
if($rootWeb -eq $NULL)
{
$rootWeb = Get-SPWeb $webApp.Url -EA SilentlyContinue
}
if(-not $webapp.Url.StartsWith("https://"))
{
Write-Warning "Web Application at $($webapp.Url) does not use HTTPS. Site Mailboxes will not work on this Web Application."
}
else
{
$sslWebAppExists = $true
Write-Host -Foreground Green "Found Web Application at $($webapp.Url) that uses HTTPS"
}
}
if(-not $sslWebAppExists)
{
Write-Warning "At least one Web Application must be configured for HTTPS in the default zone."
$anyWarnings = $true
}
}
else
{
Write-Warning "No Web Applications Found. Please create a web application and re-run Check-SiteMailboxConfig"
$anyWarnings = $true
if($ReturnWarningState)
{
return $anyWarnings
}
return;
}
if($rootWeb -eq $NULL)
{
Write-Warning "Unable to find any Sites. Please create a root site collection on a web application and re-run Check-SiteMailboxConfig"
$anyWarnings = $true
if($ReturnWarningState)
{
return $anyWarnings
}
return;
}
# Get App Permissions Management Objects
$appPrincipalManager = [Microsoft.SharePoint.SPAppPrincipalManager]::GetManager($rootWeb)
$appPrincipalPermissionsManager = New-Object -TypeName Microsoft.SharePoint.SPAppPrincipalPermissionsManager -ArgumentList $rootWeb
Write-Host
Write-Host
Write-Host "Step 3: Checking for trusted Exchange Servers"
$trustedIssuers = Get-SPTrustedSecurityTokenIssuer
$trustedIssuerHosts = @()
if($trustedIssuers -ne $NULL)
{
$foundTrustedIssuer = $false
foreach($trustedIssuer in $trustedIssuers)
{
if($trustedIssuer.RegisteredIssuerName.StartsWith("00000002-0000-0ff1-ce00-000000000000@"))
{
if($trustedIssuer.IsSelfIssuer)
{
$foundTrustedIssuer = $true
$uri = New-Object -TypeName System.Uri -ArgumentList $trustedIssuer.MetadataEndPoint
Write-Host -Foreground Green "Found trusted Exchange Server at $($uri.Host)"
$appPrincipalName = [Microsoft.SharePoint.SPAppPrincipalName]::CreateFromNameIdentifier($trustedIssuer.RegisteredIssuerName)
$appPrincipal = $appPrincipalManager.LookupAppPrincipal([Microsoft.SharePoint.SPAppPrincipalIdentityProvider]::External, $appPrincipalName);
if($appPrincipal -ne $NULL)
{
$isValidAppPrincipal = $true;
if($appPrincipalPermissionsManager.GetAppPrincipalSiteSubscriptionContentPermission($appPrincipal) -eq [Microsoft.SharePoint.SPAppPrincipalPermissionKind]::FullControl)
{
Write-Host -Foreground Green "Exchange Server at $($uri.Host) has Full Control permissions"
}
else
{
Write-Warning "Exchange Server at $($uri.Host) does not have Full Control permissions"
$isValidAppPrincipal = $false;
$anyWarnings = $true
}
if($appPrincipalPermissionsManager.IsAppOnlyPolicyAllowed($appPrincipal))
{
Write-Host -Foreground Green "Exchange Server at $($uri.Host) has App Only Permissions"
}
else
{
Write-Warning "Exchange Server at $($uri.Host) does not have App Only Permissions"
$isValidAppPrincipal = $false;
$anyWarnings = $true
}
if($isValidAppPrincipal)
{
$trustedIssuerHosts += $uri.Host
}
}
else
{
Write-Warning "Unable to get App Principal for $($uri.Host). Unable to check permissions for this Exchange Server"
$anyWarnings = $true
}
}
else
{
Write-Warning "Found trusted Exchange Server at $($uri.Host) but it is not a Self Issuer"
$anyWarnings = $true
}
}
}
if(-not $foundTrustedIssuer)
{
Write-Warning "Unable to find any trusted Exchange Servers"
$anyWarnings = $true
}
}
else
{
Write-Warning "Unable to find any trusted Exchange Servers"
$anyWarnings = $true
}
Write-Host
Write-Host
Write-Host "Step 4: Report current Site Mailbox Configuration"
if($webapps -ne $NULL)
{
foreach($webapp in $webapps)
{
Write-Host
Write-Host "Web Application Site Mailbox Configuration: $($webapp.Url)"
Write-Host "Exchange Site Mailbox Domain: $($webapp.Properties["ExchangeTeamMailboxDomain"])"
if($webapp.Properties["ExchangeAutodiscoverDomain"] -ne $NULL)
{
Write-Host "Exchange Autodiscover Domain: $($webapp.Properties["ExchangeAutodiscoverDomain"])"
}
}
}
Write-Host
Write-Host "Trusted Exchange Services: $([String]::Join(", ", $trustedIssuerHosts))"
$feature = Get-SPFeature CollaborationMailboxFarm -Farm -ErrorAction Ignore
if($feature -eq $NULL)
{
Write-Host -ForegroundColor Red "Site Mailboxes are NOT enabled for Farm"
}
else
{
Write-Host -ForegroundColor Green "Site Mailboxes are enabled for Farm"
}
if($ReturnWarningState)
{
return $anyWarnings
}
Сохраните оба PS1-файла в одной папке на сервере приложений или сервере переднего плана SharePoint Server, так как один скрипт в процессе выполнения вызывает другой. Откройте окно Microsoft PowerShell, щелкнув значок PowerShell правой кнопкой мыши и выбрав команду Запуск от имени администратора, затем перейдите к папке с PS1-файлами и запустите скрипт Set-SiteMailboxConfig.ps1. Это позволит пользователям выполнить следующие задачи:
извлечь и установить данные Exchange, благодаря тому что субъект-служба Exchange получит разрешения на полный доступ к подписке на сайт SharePoint;
включить компонент почтовых ящиков сайта в среде SharePoint;
задать целевой домен для почтовых ящиков сайта Exchange, если для DNS домена не было настроено автообнаружение (при необходимости).
Сценарий Check-SiteMailboxConfig.ps1 вызывается в процессе выполнения сценария Set-SiteMailboxConfig и проверяет, успешно ли выполнена настройка (его также можно запустить отдельно).
Используйте следующий формат:
.\Set-SiteMailboxConfig.ps1 -ExchangeSiteMailboxDomain <Домен> -ExchangeAutodiscoverDomain [Exchange Server] -WebApplicationUrl [URL-адрес]
Здесь <Домен> — это полное доменное имя домена, в котором находится сервер Exchange, а <Exchange Server> — это сервер Exchange, к которому вы планируете подключиться. Это обязательный параметр.
Дополнительными параметрами являются [Exchange Server], т. е. сервер Exchange, к которому вы подключаетесь (этот параметр требуется, если автообнаружение не включено или неправильно настроено), и [URL-адрес], т. е. конкретный URL-адрес, который вы можете настроить (обычно используется в средах с веб-приложениями, поддерживающими и не поддерживающими протокол SSL).
Пример .\Set-SiteMailboxConfig.ps1 -ExchangeSiteMailboxDomain tailspintoys.com -ExchangeAutodiscoverDomain exchange1.tailspintoys.com -WebApplicationUrl https://tailspintoys.com
Если при выполнении скрипта произойдет ошибка, обратитесь за помощью к разделу "Устранение неполадок" этой статьи.
Настройка Exchange Server для использования компонента почтовых ящиков сайта
Последний этап — установка доверия OAuth и разрешения для службы на сервере Exchange Server.
Установка доверия OAuth и разрешения для службы в Exchange
В своем экземпляре Exchange Server откройте окно управления Exchange PowerShell от имени администратора и измените путь на "C:\Program Files\Microsoft\Exchange Server\V15\Scripts".
Выполните следующую команду:
.\Configure-EnterprisePartnerApplication.ps1 -ApplicationType Sharepoint -AuthMetadataUrl https://<SP_FQDN>/_layouts/15/metadata/json/1
Здесь <SP_FQDN> — это URL-адрес корневого семейства веб-сайтов SharePoint SSL, который вы хотите настроить.
Устранение неполадок
В случае возникновения неполадок обратитесь к следующей таблице.
Таблица кодов ошибок для справки при выполнении сценария контрольного списка конфигурации
Код ошибки | Ошибка | Примечания |
---|---|---|
0 |
NoError |
Ознакомьтесь с предварительными требованиями. |
1 |
ExchangeClientNotAvailable |
Клиент веб-служб Exchange не найден на интерфейсном веб-сервере SharePoint. Запустите сценарий проверки и убедитесь в правильности записей в глобальном кэше сборок. Вам может потребоваться переустановить клиент веб-служб Exchange. |
2 |
UnsupportedVersion |
Версия клиента веб-служб Exchange несовместима с SharePoint. Запустите сценарий проверки, чтобы убедиться в том, что версия соответствует минимальным требованиям. Кроме того, возможно, используется сервер Exchange 2010 или более ранней версии. |
3 |
InvalidUser |
Для параметра TeamMailboxDomain указано недопустимое полное доменное имя или адрес SMTP. |
4 |
UnauthorizedUser |
Сценарий получил сообщение с кодом 401 с сервера Exchange Server. Ознакомьтесь с действиями по настройке Exchange. |
5 |
ServerBusy |
Истекло время ожидания Exchange в процессе автообнаружения. Это временная ошибка. Повторите попытку, но если ошибка будет повторяться, обратитесь к администратору Exchange. |
6 |
URLNotAvailable |
Автообнаружению не удалось вернуть URL-адрес ECP или OWA. Обычно это означает, что версия клиента веб-служб Exchange несовместима с SharePoint. Это также может означать, что почтовые ящики сайта не включены в Exchange. В этом случае обратитесь к администратору Exchange. |
7 |
OAuthNotSupported |
Не удалось создать маркер OAuth от имени SharePoint. Обычно это связано с тем, что проверка подлинности на основе утверждений отключена в веб-приложении SharePoint. |
8 |
OAuthException |
Во время согласования OAuth между SharePoint и Exchange произошла ошибка. Обычно это связано с проблемами настройки межсерверного взаимодействия, например несовпадением значения области на одной из сторон, проблемами с сертификатами для Exchange или SharePoint и т. д. Просмотрите сертификаты и попытайтесь установить или повторно установить отношение доверия. |
9 |
InvalidAutodiscoverDomain |
Значение свойства домена автообнаружения представляет собой недопустимое полное доменное имя. |
10 |
UnknownError |
Произошла неизвестная ошибка. Запустите сценарий проверки и убедитесь в том, что доступен допустимый доверенный экземпляр SharePoint; изучите предварительные требования; обратитесь к администратору Exchange, чтобы убедиться в том, что автообнаружение настроено правильно. |
101 |
OAuthNotSupportedOverHttp |
Если происходит эта ошибка, в качестве зоны по умолчанию вашего веб-приложения не выбран SSL, а параметр AllowOauthoverHttp также имеет значение false. Запустите сценарий проверки, чтобы убедиться в том, что для веб-приложения, в котором будут размещаться почтовые ящики сайтов, задана зона по умолчанию с поддержкой SSL, как указано в предварительных требованиях. |
102 |
AssociatedOwnersGroupNull |
Группа владельцев или участников для сайта либо обе этих группы удалены. Обе эти группы по умолчанию должны существовать на сайте, на котором пользователи устанавливают почтовые ящики сайта. Администратор сайта должен указать владельцу сайта на необходимость повторного создания этих двух обязательных групп. |
103 |
ExchangeTeamMailboxDomainNotSet |
Свойство ExchangeTeamMailboxDomain не задано. |
104 |
ExchangeAppPrincipalNotFound |
Не найдены доверенные субъекты приложения Exchange. Обычно это означает, что было пропущено действие New-SPTrustedSecureTokenService. Запустите сценарий проверки и убедитесь в том, что выходные URL-адреса субъектов приложения правильны. |
105 |
ExchangeAppPrincipalMissingPermissions |
Субъект приложения Exchange, к которому выполняется подключение, не имеет соответствующих разрешений в ферме SharePoint. Запустите сценарий проверки и убедитесь в том, что субъект приложения Exchange имеет необходимые разрешения в ферме. |
See also
Plan email integration for a SharePoint Server farm
Configure email integration for a SharePoint Server farm