Настройка почтовых ящиков сайта в 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

  1. Скачайте файл EWSManagedAPI.msi в Центре загрузки Майкрософт и сохраните его в папке на каждом веб-сервере и сервере приложений.

  2. Откройте окно командной строки от имени администратора и перейдите к папке, в которой сохранен файл EWSManagedAPI.msi.

  3. Выполните следующую команду:

    msiexec /I EwsManagedApi.msi addlocal="ExchangeWebServicesApi_Feature,ExchangeWebServicesApi_Gac"
    
  4. Перезапустите 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

  1. В своем экземпляре Exchange Server откройте окно управления Exchange PowerShell от имени администратора и измените путь на "C:\Program Files\Microsoft\Exchange Server\V15\Scripts".

  2. Выполните следующую команду:

    .\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

Почтовые ящики сайта
Совместная работа