Para personalizar en Microsoft 365 la firma de correo corporativa y que además sea la misma para todos los usuarios de tu tenant, tienes que recurrir a productos de terceros. Y eso implica pagar un coste adicional, que normalmente varía según el número de usuarios que tengas, pero que siempre nos parece caro para lo que conseguimos a cambio.

Es uno de esos detalles que te hubiese gustado establecer en el proceso de migración a Microsoft 365, pero que no resulta tan intuitivo sin comprar herramientas de terceros.

En este artículo voy a explicar cómo puedes personalizar esa firma de correo corporativa utilizando un script de PowerShell. Es una solución que no es perfecta, pero que podría servirte en determinadas circunstancias.

No es perfecta porque presenta una limitación y es que este método establece la firma de correo común para todos los usuarios en Outlook Web y en el nuevo Outlook escritorio, pero no lo hace ni en el Outlook escritorio clásico (ni lo va a hacer), ni en el Outlook móvil. En este último, es cuestión de tiempo que funcione, pues Microsoft está unificando las las firmas en todos los Outlooks salvo el clásico.

Es una limitación, sí, pero si en tu organización habéis dejado atrás el vetusto y pesado Outlook escritorio clasico y cambiado al nuevo Outlook escritorio, cosa que te recomiendo si vais en serio con la nube, esta solución puede que te encaje suficientemente bien.

El caso es que poder personalizar una firma de correo corporativa para todos de forma centralizada consigue evitar el caos de firmas que suele exitir en muchas organizaciones, cuando desde Marketing deciden cambiar la firma corporativa, pero cada uno debe incluirla en su Outlook de manera manual. Unos lo hacen correctamente el primer día, otros no terminan de hacerlo bien y les queda un churro y otros no lo terminan de hacer nunca.

Tener el control centralizado de las firmas permite cuidar la imagen corporativa que proyectamos al exterior, o cosas más prácticas como añadir a la firma un texto o banner publicitario para promocionar productos, eventos o lo que sea.

Estableciendo la firma con PowerShell

Lo que vamos a ver es cómo puedes establecer una firma corporativa para todos los usuarios de tu tenant, de manera que cada usuario tenga como firma ese diseño corporativo que establezcáis, pero con sus datos personales extraidos de AzureAD (Entra ID). Esto implica que debes mantener actualizados los datos personales de los usuarios en el panel de administración de Microsoft 365.

La primera vez que uses el script te costará un poco más de esfuerzo, pero a partir de entonces, te será bastante sencillo modificar o pedir a un compañero que te pase el archivo HTML con la firma modificada y volver a ejecutar el script.

Requerimientos

Para poder establecer las firmas necesitas:

  1. Mantener actualizados en el panel de administración de Microsoft 365 los datos personales de los usuarios, tales como Nombre, Apellidos, Puesto, Teléfono móvil o los que creas necesarios para la firma.
  2. Un usuario con rol de Administrador Global en tu tenant Microsoft 365.
  3. Un ordenador con permisos para ejecutar PowerShell en modo Administrador (solo la primera vez).
  4. Tener instalados en PowerShell los módulos AzureADPreview y ExchangeOnline (para esto necesitas ejecutar PowerShell en modo Administrador la primera vez).
  5. Crear un archivo llamado por ejemplo Firma.html, que contenga la firma de correo deseada en formato HTML.
  6. Crear un archivo con el nombre que quieras y extensión .ps1, que contenga el script PowerShell que se incluye abajo.

Limitaciones

  1. Ya he comentado que esta solución establece la firma únicamente en Outlook Web y en el Nuevo Outlook escritorio. No establece la firma ni en Outlook escritorio clásico, ni en Outlook móvil.
  2. Las imágenes que quieras incluir en la firma, tales como el logo corporativo o logos de redes sociales, etc, deben ir referenciadas en el archivo HTML como vínculos, es decir, la firma no puede contener imágenes incrustadas en formato Base64.

El archivo con la firma

Para este ejemplo, voy a usar un archivo de firma con un HTML muy sencillo, que es con el que firmo mis mensajes habitualmente, pero puedes hacerlo todo lo complejo que quieras.

Este mi HTML de ejemplo, puedes usarlo como base pegándolo en el archivo de texto con tu firma, adaptándolo a tu organización y llamando al archivo Firma.html:

<img src="https://avanza365.com/wp-content/uploads/2023/09/avanza_color-uai-720x187.png" width="110"><br>%%Nombre%% %%Apellidos%%<br>%%Movil%%<br>%%Correo%%<br><a href="https://avanza365.com">https://avanza365.com</a><br><br>Conoce <a href="https://avanza365.com">mi nuevo curso online</a> para que todos tus empleados aprendan a usar Teams con el m&eacute;todo Avanza365

Como puedes ver en el código de ejemplo, debes incluir entre porcentajes dobles %% los nombres de los campos que quieres que se reemplacen por los datos reales del usuario que vienen de AzureAD al ejecutar el script.

El resultado de aplicar ese HTML como firma es este:

La lista de campos o atributos del usuario que puedes usar en la firma y sus equivalentes en el panel de administración (en español) y en AzureAD es esta:

En el HTML de tu firmaEn el Admin de MS365En AzureAD
%%Nombre%%NombreGivenName
%%Apellidos%%ApellidosSurname
%%Puesto%%PuestoJobTitle
%%Departamento%%DepartamentoDeparment
%%Oficina%%OficinaPhysicalDeliveryOfficeName
%%Telefono%%Teléfono de la oficinaTelephoneNumber
%%Movil%%Teléfono móvilMobile
%%Correo%%(No aparece, se obtiene de la cuenta)Mail
%%Direccion%%DirecciónStreetAddress
%%Ciudad%%PoblaciónCity
%%CodigoPostal%%Código postalPostalCode
%%Provincia%%Estado o ProvinciaState
%%Pais%%País o regiónCountry

De esta manera, donde quieres que vaya el nombre, en lugar de poner Josu Lekaroz, pondrás %%nombre%% %%Apellidos%% y en lugar de poner Donostia-San Sebastián, pondrás %%Ciudad%%.

Dos detalles importantes que debes tener en cuenta:

  1. Como ya he comentado, las imágenes no pueden ser incrustadas en el archivo de firma en formato Base64, por lo que debes subirlas a un espacio web, obtener sus URLs y referenciarlas como vínculos en los «img src» de tu HTML.
  2. Toda la firma debe ir en una sola línea sin saltos, por lo que deberás asegurarte de que quitas todos los saltos de línea antes de guardar definitivamente el archivo. Editores como Notepad++ te permiten reemplazar caracteres extendidos y buscar todos los \r\n, que son los saltos de línea, reemplazándolos por un espacio vacío.

A parte de esto, tienes bastante libertad para crear y aplicar formato a tu firma como quieras.

El script PowerShell

Muchas gracias a Tony Redmond de Office for IT Pros por la inspiración y a Kamil de MailSignatures.com por la base para el script, el mérito y el conocimiento es de ellos, yo no he hecho sino retocar y adaptar.

<#$users = (Get-AzureADUser -filter "Mail eq 'josu@avanza365.com'" | select GivenName, Surname, JobTitle, Department, TelephoneNumber, Mobile, Mail, PhysicalDeliveryOfficeName, StreetAddress, City, PostalCode, State, Country); $NumUsers = 1 <# Obtiene los datos de un usuario concreto y los mete en un array. Esta pensado para hacer pruebas con tu propio usuario o un usuario de prueba#>

$users = (Get-AzureADUser -All $true | Where-Object { $_.AssignedLicenses.Count -ne 0 } | select GivenName, Surname, JobTitle, Department, TelephoneNumber, Mobile, Mail, PhysicalDeliveryOfficeName, StreetAddress, City, PostalCode, State, Country); $NumUsers = $users.count <# Obtiene los datos de todos los usuarios que tengan licencia en Entra ID (Azure AD) y los mete en un array. Si quieres, puedes seleccionar menos datos o filtrar los usuarios#>

$HTMLsig = Get-Content ".\Firma.html" <# Guarda en una variable el contenido HTML del archivo Firma.html. Cambia la ruta para que apunte a la ubicación de tu archivo.#>

$ProgDelta = 100/($NumUsers); $CheckCount = 0; $UserNumber = 0 <# Variables para mostrar el progreso #>

Write-Host "Procesando buzones"

foreach ($user in $users){
    $UserNumber++
    $UserStatus = $user.Mail + " ["+ $UserNumber +"/" + $NumUsers + "]"
    Write-Progress -Activity "Procesando buzones" -Status $UserStatus -PercentComplete $CheckCount
    Write-Host "Procesando buzon: " $UserStatus
    $CheckCount += $ProgDelta
    
    $HTMLSigX = ""; <# Define variable temporal #>
    $HTMLSigX = $HTMLsig.replace('%%Nombre%%', $user.GivenName).replace('%%Apellidos%%', $user.Surname).replace('%%Puesto%%', $user.JobTitle).replace('%%Departamento%%', $user.Department).replace('%%Telefono%%', $user.TelephoneNumber).replace('%%Movil%%', $user.Mobile).replace('%%Correo%%', $user.Mail).replace('%%Empresa%%', $user.CompanyName).replace('%%Direccion%%', $user.StreetAddress).replace('%%Ciudad%%', $user.City).replace('%%CodigoPostal%%', $user.PostalCode).replace('%%Provincia%%', $user.State).replace('%%Pais%%', $user.Country) <# Reemplaza los parámetros de la firma con los datos de cada usuario en Entra Id#>
    Set-MailboxMessageConfiguration $user.Mail -SignatureHTML $HTMLSigX -AutoAddSignature $true -AutoAddSignatureOnReply $false <# Establece la firma personalizada para el buzón de cada usuario en Outlook Web y en el nuevo Outlook escritorio. El parámetro -AutoAddSignature establece la firma por defecto para todos los mensajes nuevos automáticamente y el parámetro -AutoAddSignatureOnReply hace los mismo para mensajes de respuesta. Yo he establecido que no se incluya en las respuestas porque lo prefiero así. #>
}
Write-Host "Hecho! Se han actualizado las firmas de" $NumUsers "buzones"

Copia y pega este código en un archivo de texto y guárdalo con el nombre que quieras y la extensión .ps1.

El script establece la firma que hayas incluido en el archivo Firma.html para todos los usuarios del tenant que tengan una licencia activa.

También establece que esta firma se incluya automáticamente en los mensajes nuevos pero no en los mensajes de respuesta o reenvío. Es como me gusta a mi, pero puedes cambiarlo modificando el comando Set-MailboxMessageConfiguration poniendo $true o $false en los parámetros -AutoAddSignature y -AutoAddSignatureOnReply.

Por ejemplo, si quisieras que se inserte la firma para nuevos mensajes y para respuestas, tendías que cambiar la línea con ese comando para que quede así:

Set-MailboxMessageConfiguration $user.Mail -SignatureHTML $HTMLSigX -AutoAddSignature $true -AutoAddSignatureOnReply $true

Para que puedas hacer pruebas con un usuario específico (quizás con el tuyo propio) antes de aplicarlo a todos tus usuarios, he incluido una primera línea que está comentada con los caracteres <# y que sirve para puedas probar.
Si quieres hacer pruebas con un usuario específico:

  1. Descomenta (activa) esa primera línea borrando los caracteres iniciales <# y sustituye en esa misma línea mi dirección email con la que quieras usar en tus pruebas.
  2. Comenta (desactiva) la línea 2, insertando los caracteres <# al inicio de la línea.
  3. Guarda el archivo y ejecuta el script sobre ese único usuario para que veas cómo queda la firma.

Cuando termines con las pruebas y estés contento con el aspecto de la firma, vuelve a dejar las 2 primeras líneas como estaban para que el script se ejecute ya sobre todos los usuarios del tenant que tengan una licencia activa.

Personalizar la firma de correo corporativa: El Proceso paso a paso

  1. Crea una carpeta “Establecer Firma HTML” en tu disco duro y copia a esa carpeta los dos archivos, el del script y el de la firma que debe llamarse Firma.html.
  2. Abre PowerShell en modo Administrador
  3. La primera vez y si no los tienes instalados ya, debes instalar los módulos AzureADPreview y ExchangeOnline en PowerShell.

Instala primero AzureADPreview con el comando Install-module AzureADPreview.

Nota: Si al intentar instalar cualquiera de los dos módulos te sale un aviso que indica que ya hay una versión anterior instalada, añade el parámetro -Force al final del comando para forzar la instalación de la última versión, tal como me ocurrió a mí con AzureADPreview (en la imagen).

A continuación, instala ExchangeOnline con el comando Install-ExchangeOnlineManagement, respondiendo que Sí con una S mayúscula a la pregunta que aparece a continuación

  1. Dirígete a la carpeta “Establecer Firma HTML” usando el comando CD de PowerShell.
  1. Conéctate a AzureAD y a Exchange Online en tu tenant con los comandos Connect-AzureAd y Connect-ExchangeOnline

En ambos casos, te pedirá que inicies sesión con un usuario que tenga permisos de Administrador Global.

Conectar a AzureAD tecleando Connect-AzureAd:

A mi me ofrece los usuarios que he usado anteriormente, si no tienes ninguno, te pedirá el usuario y clave de un admin global de tu tenant.

Elige o introduce tu usuario y clave y si son correctos, se conectará y te mostrará los datos de tu tenant

A continuación conéctate a Exchange Online tecleando Connect-Exchangeonline

Te volverá a pedir usuario y clave de admintrador.

Una vez hecho el login y tras mostrarte cierta información (en amarillo) acerca de la versión, te habrás conectado al Exchange de tu tenant

  1. Conectado a ambos entornos, ya estás listo para ejecutar el script. En mi caso se llama SetOutlookSignatures.ps1.

En mi caso, ha actualizado las firmas de los dos únicos usuarios con licencia que hay en mi tenant.

  1. Comprueba en Outlook Web y el nuevo Outlook escritorio que la firma se ha establecido correctamente. Los resultados son bastante instantáneos, simplemente tienes que recargar Outlook web en el navegador y cerrar y abrir Outlook escritorio para que puedas visualizar los cambios.

Para Outlook web, tendrás que recargar la página en el navegador para que coja la nueva firma. Hecho esto, simplemente crea un mensaje nuevo y fíjate en la nueva firma.

Si compruebas la configuración de la firma en Outlook web, verás que estará cambiada a la que has establecido al ejecutar el script

Para el nuevo Outlook escritorio, tendrás que cerrarlo y volverlo a abrir para que puedas ver el cambio.

En ambos casos, puedes ver cómo se ha establecido también que la firma se incluya en todos los mensajes nuevos, pero no en reenvíos o respuestas.

Esto sería todo. La próxima vez que quieras volver a cambiar y personalizar la firma de correo corporativa para todos, no tendrás que preocuparte de instalar los módulos PowerShell y por tanto, no hará falta que ejecutes PowerShell como Administador. Símplemente bastará con que modifiques el archivo HTML de la firma, te conectes a AzureAD y a Exchange Online y ejecutes el script.

Espero que te sirva.