Configurar buzones de sitio en SharePoint Server

SE APLICA A:yes-img-132013 yes-img-162016 yes-img-192019 yes-img-seSubscription Edition no-img-sopSharePoint en Microsoft 365

En este artículo se describe cómo configurar buzones de sitio en SharePoint Server y Exchange Server. La característica Buzones de sitio proporciona a los usuarios de SharePoint Server correo electrónico de equipo en un sitio. Buzones de sitio también proporciona vínculos a bibliotecas de documentos de SharePoint en Microsoft Outlook, lo que permite a los usuarios compartir archivos y mensajes de correo electrónico con otros miembros de un equipo que trabajan en un proyecto conjunto.

Antes de empezar

Antes de empezar esta operación, revise la siguiente información sobre los requisitos previos:

  • Los buzones de sitio requieren Exchange Server 2013 o posterior.

  • Es necesario desinstalar todas las versiones anteriores de Servicios Web Exchange (EWS) de los servidores de SharePoint.

    Nota:

    Es posible que tenga que averiguar si está instalada alguna versión anterior de EWS. Si está instalada, ejecute el script Check-SiteMailboxConfig al que se hace referencia a continuación.

  • La característica Buzones de sitio requiere que la sincronización de perfiles de usuario esté configurada en la granja de servidores. Para obtener información sobre cómo configurar la sincronización de perfiles de usuario, vea Perfiles de usuario e identidades, y Administrar la sincronización de perfiles de usuario en SharePoint Server.

  • La función de buzones del sitio requiere que esté configurada la aplicación de servicio de administración de aplicaciones en la granja de servidores. Para obtener información sobre la configuración de la aplicación de servicio de administración de aplicaciones, vea New-SPAppManagementServiceApplication.

  • Capa de sockets seguros (SSL) configurada para la zona predeterminada es un requisito para las aplicaciones web que se implementan en escenarios que admiten la autenticación de servidor a servidor y la autenticación de aplicaciones. Este es un escenario de este tipo. Como requisito previo para configurar buzones de sitio, el equipo que ejecuta SharePoint Server debe tener SSL configurado. Para obtener más información, vea Creación de aplicaciones web basadas en notificaciones en SharePoint Server y siga los pasos para crear una colección de sitios SSL y un certificado de servidor.

Tenga en cuenta que es posible que tenga que importar el certificado SSL de Exchange Server de Exchange Server a SharePoint Server y de SharePoint Server a Exchange Server. Esto solo es necesario si el certificado no es de confianza para los puntos de conexión de API (como un certificado Self-SSL en un entorno de laboratorio). Para importar un certificado SSL que no es de confianza en un nuevo servidor:

  • Abra Internet Explorer y navegue hasta Outlook Web App Preview (si la implementación está en SharePoint Server) o hasta el sitio SSL de SharePoint (si la implementación está en Exchange Server): https://<ExServerName>/owa o https://<SP_FQDN>.

  • Para aceptar confiar en el certificado, haga clic en Continuar al sitio web.

  • Haga clic en la información de Error de certificado en Internet Explorer junto a la barra de direcciones y, después, haga clic en Ver certificados.

  • Seleccione Instalar certificado y luego, Colocar todos los certificados en el siguiente almacén.

  • Active la casilla para mostrar los almacenes físicos.

  • Instale el certificado en el equipo local de entidades > de certificación raíz de confianza.

  • Para realizar estos procedimientos, debe ser miembro de SharePoint y de los grupos de administradores de Exchange Server y tener Exchange Server operativo con buzones de usuario final.

  • Una solución de copia de seguridad de SharePoint no incorporará buzones de sitio de Exchange. Los administradores de Exchange deberán asegurarse de que se realicen las copias de seguridad oportunas de los buzones del sitio.

  • Los usuarios que acceden a archivos de una biblioteca de documentos de SharePoint desde un buzón de sitio deben tener la biblioteca de documentos configurada como un sitio de confianza en su explorador o aparecerá una advertencia que pregunta al usuario si quiere confiar en el archivo.

Configuración de SharePoint para Buzones de sitio en SharePoint Server

El primer paso para configurar Buzones de sitio es instalar la API de Servicios web Exchange Server en cada servidor web y de aplicaciones de la granja de servidores SharePoint Server.

Instalación de la API de Servicios web de Exchange en SharePoint Server

  1. Descargue EWSManagedAPI.msi del Centro de descarga de Microsoft y guárdelo en una carpeta en cada servidor web y de aplicaciones.

  2. Abra una ventana de comandos como administrador y desplácese hasta la carpeta donde guardó EWSManagedAPI.msi.

  3. Ejecute el comando siguiente:

    msiexec /I EwsManagedApi.msi addlocal="ExchangeWebServicesApi_Feature"
    
  4. Reinicie IIS desde la línea de comando escribiendo IISReset.

Establecer la confianza OAuth y los permisos del servicio en SharePoint Server

El siguiente paso es copiar los dos scripts siguientes. El primero se debe guardar como Set-SiteMailboxConfig.ps1, y el segundo se debe guardar como 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
}

Guarde los dos archivos .ps1 en la misma carpeta en un servidor de aplicaciones o front-end de SharePoint Server, ya que un script llama al otro durante la ejecución. En una ventana de Microsoft PowerShell (haga clic con el botón derecho en el icono de PowerShell y elija Ejecutar como administrador para abrir), vaya a la carpeta que contiene los archivos de .ps1 y ejecute el script de Set-SiteMailboxConfig.ps1. Esto permitirá a los usuarios hacer lo siguiente:

  • Recuperar e instalar los metadatos de Exchange, para conceder a la entidad de servicio de Exchange permisos de control total sobre la suscripción al sitio de SharePoint

  • Habilitar la función de buzones del sitio en el entorno de SharePoint

  • (Opcional) Establecer el dominio de destino de los buzones del sitio de Exchange, si no se ha configurado el DNS del dominio para la Detección automática

Se llama a Check-SiteMailboxConfig.ps1 como parte del script Set-SiteMailboxConfig, y confirma que la configuración se ha realizado correctamente (también se puede ejecutar de forma independiente).

El formato debe ser como sigue:

   .\Set-SiteMailboxConfig.ps1 -ExchangeSiteMailboxDomain \<Domain\> -ExchangeAutodiscoverDomain [Exchange Server] -WebApplicationUrl [URL]

Donde <Dominio> es el nombre completo del dominio en el que se encuentra su servidor de Exchange, y <Servidor de Exchange> es el servidor de Exchange al que desea conectarse. Este parámetro es obligatorio.

Los parámetros opcionales son [Exchange Server], que es el servidor de Exchange al que desea conectarse (esto es necesario si la Detección automática no está habilitada o no está correctamente configurada) y [URL], que sería una dirección URL específica que estuviera configurando (generalmente se usa en un entorno con aplicaciones web SSL y aplicaciones web que no sean de SSL).

Ejemplo:

   .\Set-SiteMailboxConfig.ps1 -ExchangeSiteMailboxDomain tailspintoys.com -ExchangeAutodiscoverDomain exchange1.tailspintoys.com -WebApplicationUrl https://tailspintoys.com

Si se produce algún error durante la ejecución del script, vea la sección "Solución de problemas" en este artículo para obtener instrucciones.

Configuración de Exchange Server 2013 para Buzones del sitio

El último paso consiste en establecer la confianza OAuth, y los permisos del servicio, en el servidor Exchange.

Establecer la confianza OAuth y el permiso del servicio en Exchange

  1. En su instancia de Exchange Server, abra la ventana de Exchange Management PowerShell como Administrador y vaya al directorio "C:\Archivos de programa\Microsoft\Exchange Server\V15\Scripts".

  2. Ejecute el siguiente comando:

    .\Configure-EnterprisePartnerApplication.ps1 -ApplicationType Sharepoint -AuthMetadataUrl https://<SP_FQDN>/_layouts/15/metadata/json/1
    

    Donde <SP_FQDN> es la dirección URL de la colección de sitios raíz SSL de SharePoint que quiere configurar.

Solución de problemas

Revise la siguiente tabla si tiene problemas.

Tabla de códigos de error para consultar al ejecutar un script de lista de comprobación de configuración

Código de error Error Notas
0
NoError
Revise los requisitos previos.
1
ExchangeClientNotAvailable
No se encontró el cliente de EWS en el WFE de SharePoint. Ejecute el script de comprobación y compruebe que las entradas de la GAC son correctas; es posible que tenga que reinstalar el cliente de EWS.
2
UnsupportedVersion
La versión del cliente de EWS es incompatible con SharePoint. Ejecute el script de comprobación para comprobar que la versión cumple los requisitos mínimos. También es posible que el servidor Exchange sea 2010 o anterior.
3
InvalidUser
El parámetro TeamMailboxDomain no es una dirección SMTP ni un FQDN válido.
4
UnauthorizedUser
El script recibió un 401 de Exchange Server; revise los pasos de configuración de Exchange.
5
ServerBusy
Exchange agotó el tiempo de espera durante la Detección automática. Debe ser intermitente, vuelva a intentarlo, pero si es persistente, realice un seguimiento con el administrador de Exchange.
6
URLNotAvailable
La Detección automática no pudo devolver una dirección URL para ECP/OWA, lo que suele significar que la versión del cliente de EWS es incompatible con SharePoint. También puede querer decir que los buzones del sitio no están habilitados en Exchange; si ocurre esto último, es necesario que realice un seguimiento con el Administrador de Exchange.
7
OAuthNotSupported
No se pudo generar un token de OAuth en nombre de SharePoint. Esto suele deberse a que la autenticación basada en notificaciones está deshabilitada en la aplicación web de SharePoint.
8
OAuthException
Error del protocolo de enlace de OAuth entre SharePoint y Exchange. Suele deberse a problemas de configuración de servidor a servidor como, por ejemplo, que no coincidan los valores de territorio de ambos lados, que haya problemas de certificados de Exchange o SharePoint, etc. Revise los certificados e intente establecer o restablecer la confianza.
9
InvalidAutodiscoverDomain
La propiedad de dominio de Detección automática no tiene configurado un FQDN válido.
10
UnknownError
Se ha producido una condición de error desconocido. Ejecute el script Comprobar y confirme que una instancia válida de SharePoint está disponible, revise los requisitos previos y confirme que la Detección automática se ha configurado correctamente con el administrador de Exchange.
101
OAuthNotSupportedOverHttp
Si aparece este error, la zona predeterminada de la aplicación web no está configurada como SSL, y AllowOauthoverHttp también está configurado como false. Ejecute el script de comprobación para comprobar que todas las aplicaciones web en las que desea hospedar buzones del sitio están configuradas con SSL en la zona predeterminada, como se indica en los requisitos previos.
102
AssociatedOwnersGroupNull
El grupo predeterminado del sitio Propietarios, el grupo predeterminado del sitio Miembros o ambos grupos se han eliminado. Ambos grupos predeterminados deben existir en cualquier sitio donde los usuarios instalen buzones de sitio. Un administrador del sitio debe poder dirigir a un propietario del sitio para que vuelva a crear estos grupos necesarios.
103
ExchangeTeamMailboxDomainNotSet
La propiedad ExchangeTeamMailboxDomain no se ha establecido.
104
ExchangeAppPrincipalNotFound
No se encontró ninguna entidad de aplicación de Exchange que sea de confianza. En general, esto significa que no se ha realizado el paso New-SPTrustedSecureTokenService. Ejecute el script de comprobación y compruebe que las direcciones URL de entidades de aplicación resultantes son las correctas.
105
ExchangeAppPrincipalMissingPermissions
La entidad de aplicación de Exchange a la que se está conectando no tiene los permisos correctos en la granja de servidores de SharePoint. Ejecute el script de comprobación y compruebe que la entidad de aplicación de Exchange cuenta con los permisos necesarios en la granja de servidores.

Vea también

Conceptos

Plan email integration for a SharePoint Server farm

Configure email integration for a SharePoint Server farm

Otros recursos

Buzones de sitio

Colaboración