Настройка почтовых ящиков сайта в SharePoint Server

ОБЛАСТЬ ПРИМЕНЕНИЯ:yes-img-132013 yes-img-162016 yes-img-192019 yes-img-seSubscription Edition no-img-sopSharePoint в Microsoft 365

В этой статье описывается настройка почтовых ящиков сайта в SharePoint Server и Exchange Server. Функция "Почтовые ящики сайта" предоставляет пользователям SharePoint Server электронную почту группы на сайте. Почтовые ящики сайта также предоставляют ссылки на библиотеки документов SharePoint в Microsoft Outlook, позволяя пользователям делиться файлами и сообщениями электронной почты с другими членами команды, которые работают над совместным проектом.

Перед началом работы

Перед выполнением этой операции ознакомьтесь со следующими сведениями о необходимых компонентах:

  • Для почтовых ящиков сайта требуется Exchange Server 2013 или более поздней версии.

  • Предыдущие версии веб-служб Exchange необходимо удалить с серверов SharePoint.

    Примечание.

    [!Примечание] Вам может потребоваться определить, установлена ли предыдущая версия EWS. Для этого выполните скрипт Check-SiteMailboxConfig, приведенный ниже.

  • Функция "Почтовые ящики сайта" требует, чтобы в ферме была настроена синхронизация профилей пользователей. Сведения о настройке синхронизации профилей пользователей см . в разделах Профили пользователей и удостоверения и Управление синхронизацией профилей пользователей в SharePoint Server.

  • Компонент почтовых ящиков сайта требует, чтобы в ферме было настроено приложение-служба управления приложениями. Сведения о настройке приложения-службы управления приложениями см. в разделе New-SPAppManagementServiceApplication.

  • Для веб-приложений, развернутых согласно сценариям, поддерживающим проверку подлинности между серверами и проверку подлинности приложений, требуется настройка протокола SSL для зоны по умолчанию. В этой статье идет речь именно о таком сценарии. Чтобы можно было настроить компонент почтовых ящиков сайта, на компьютере с SharePoint Server должно быть настроено использование SSL. Просмотрите дополнительные сведения в статье Создание на основе утверждений веб-приложений в SharePoint Server, а затем выполните действия для создания семейства веб-сайтов 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://<ExServerName>/owa или https://<SP_FQDN>.

  • Подтвердите доверие для сертификата, щелкнув Перейти на веб-сайт.

  • Щелкните информацию об ошибке сертификата в 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"
    
  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) doesn't 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 \<Domain\> -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 откройте окно 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
Клиент EWS не найден в WFE SharePoint. Запустите сценарий Проверки и убедитесь, что записи правильно находятся в GAC; Может потребоваться переустановить клиент EWS.
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, что обычно означает, что версия клиента EWS несовместима с 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 имеет необходимые разрешения в ферме.

См. также

Понятия

Plan email integration for a SharePoint Server farm

Configure email integration for a SharePoint Server farm

Другие ресурсы

Почтовые ящики сайта

Совместная работа