Cómo recuperar todas las direcciones de correo electrónico SMTP mediante PowerShell en Exchange

¿Intentas exportar todas esas direcciones SMTP desde Exchange u Office 365? Sí, es útil para auditorías, migraciones o simplemente para identificar quién tiene qué alias de correo electrónico. A veces, la única pista para limpiar o solucionar problemas es esa enorme lista de SMTP vinculados a usuarios, contactos o grupos.¿Convertir toda esa información en un CSV? Es posible con PowerShell, pero al principio puede ser un poco confuso, especialmente al gestionar Exchange local o integrar objetos de Azure AD. Esta guía te mostrará el camino con algunos comandos y consejos sencillos, para que no te quedes atascado mirando un mar de direcciones de correo electrónico. Verás direcciones principales, alias y cómo exportar todo correctamente para futuras referencias. Y sí, funciona tanto en entornos de Exchange Server como de Microsoft 365, porque, por supuesto, debes cambiar de marcha según tu situación.

Cómo exportar direcciones SMTP desde Exchange o Microsoft 365

Conéctese a su entorno Exchange

  • Puede utilizar Exchange Management Shell (EMS) para Exchange local: normalmente lo encontrará en el menú Inicio, en Exchange Management Shell.
  • O, para configuraciones en la nube, conéctese a través de PowerShell usando el módulo Exchange Online.

En configuraciones más recientes, probablemente necesitará instalar el módulo PowerShell de Exchange Online más reciente. Aquí tiene una forma rápida de conectarse a su inquilino:

Connect-ExchangeOnline -UserPrincipalName [email protected]

Consejo profesional: Dependiendo de su entorno, podría tener que ejecutar PowerShell como administrador o configurar sus políticas de ejecución con [nombre del usuario] Set-ExecutionPolicy RemoteSigned. Además, si tiene problemas de conexión, a veces es útil reiniciar PowerShell o volver a autenticarse.

Ver direcciones de correo electrónico de un solo buzón

Este comando extrae todas las direcciones SMTP principales y secundarias de un usuario específico:

Get-Mailbox testmax | Select-Object DisplayName, PrimarySmtpAddress, EmailAddresses | Format-List

Esto te ayuda a verificar la información. Las mayúsculas SMTPindican la dirección principal y las minúsculas smtpson alias o direcciones adicionales. A veces, verás otros tipos de direcciones, como X400 o direcciones personalizadas, por lo que este comando ofrece una buena idea inicial de lo que está asignado.

Extraer todas las direcciones SMTP, incluidos los alias

Dado que un buzón puede tener varias direcciones SMTP almacenadas EmailAddresses, este comando las filtra explícitamente:

Get-Mailbox testmax | Select-Object DisplayName, PrimarySmtpAddress, @{ Name="SMTPAliases"; Expression={ ($_. EmailAddresses | Where-Object { $_ -match "^smtp:" } | ForEach-Object { $_ -replace "^smtp:", "" }) -join ", " } }

De esta forma, obtendrá una lista de todos los alias SMTP separados por comas. Si desea hacer esto para todos los buzones de usuario y guardarlo como CSV, aquí tiene la imagen completa:

Get-Mailbox -ResultSize Unlimited | Select-Object DisplayName, PrimarySmtpAddress, @{ Name="SMTPAliases"; Expression={ ($_. EmailAddresses | Where-Object { $_ -match "^smtp:" } | ForEach-Object { $_ -replace "^smtp:", "" }) -join ", " } } | Export-Csv "C:\\PS\\List-All-SMTP-Addresses.csv" -NoTypeInformation -Encoding UTF8

Esto genera una lista limpia con todos los buzones de usuario. La ruta se puede cambiar a la que prefieras. Incluso en algunas configuraciones, ejecutar este comando una vez podría generar errores o datos incompletos. A veces, un reinicio o reconexión rápidos ayudan, así que no te rindas si la primera vez falla.

Obtener direcciones SMTP de todos los objetos en Active Directory o Azure AD

Si necesita más que solo cuentas de usuario, como contactos, grupos u objetos habilitados para correo, utilice Get-Recipient. Abarca todos los tipos de objetos en su arrendamiento de Exchange:

Get-Recipient -ResultSize Unlimited | Select-Object DisplayName, RecipientType, PrimarySmtpAddress, @{ Name="SMTPAliases"; Expression={ ($_. EmailAddresses | Where-Object { $_ -match "^smtp:" } | ForEach-Object { $_ -replace "^smtp:", "" }) -join ", " } }

¿Solo quieres, por ejemplo, grupos de distribución? Simplemente añade el -RecipientTypeparámetro así:

Get-Recipient -ResultSize Unlimited -RecipientType DistributionGroup |...

De esta manera, puede filtrar el desorden y centrarse en tipos de objetos específicos, lo que resulta útil si está intentando limpiar o auditar direcciones de correo electrónico en todo su entorno de Microsoft.

Encontrar direcciones SMTP duplicadas

Si teme que varios objetos puedan compartir la misma dirección de correo electrónico, este comando enumera todos los SMTP de cada destinatario, lo que resulta ideal para solucionar conflictos de direcciones o duplicados:

Get-Recipient -ResultSize Unlimited | Where-Object { $_. EmailAddresses -like "*[email protected]*" }

No es ideal para grandes usuarios, pero es suficiente para comprobaciones rápidas. Si desea una lista sin procesar de todos los SMTP, esta opción mostrará las direcciones de forma simplificada: sin duplicados, solo direcciones.

Get-Recipient | Select-Object -ExpandProperty EmailAddresses | Where-Object { $_ -match "^smtp:" } | ForEach-Object { $_ -replace "^smtp:", "" } | Sort-Object -Unique

Ideal para echar un vistazo rápido a todos los SMTP únicos que circulan en su organización. A veces, saber qué se usa ya es suficiente para resolver conflictos de correo electrónico o prepararse para una migración.

Resumen

  • Utilice comandos de PowerShell como Get-Mailboxy Get-Recipientpara enumerar direcciones de correo electrónico.
  • Filtra y limpia las direcciones de correo electrónico para ver claramente las direcciones principales y los alias.
  • Exporte todo a CSV para facilitar la gestión o las auditorías.
  • Asegúrese de conectarse al entorno correcto (local o en la nube) antes de ejecutar comandos.
  • Tenga paciencia: a veces los comandos necesitan un par de intentos o un reinicio rápido de la sesión para mostrar la lista completa.

Resumen

Obtener todas esas direcciones SMTP de Exchange o Microsoft 365 no es tarea fácil una vez que se domina PowerShell. Es un poco complejo de aprender, sobre todo al trabajar con diferentes tipos de objetos y entornos, pero los comandos son bastante sencillos. Lo que realmente ayuda es saber qué cmdlets usar y cómo filtrar los resultados para mayor claridad. Con esto, debería poder obtener, ver y exportar todas las direcciones de correo electrónico vinculadas a usuarios, contactos y grupos sin demasiados problemas. Esperamos que esto le ahorre algunas horas a alguien que intente realizar una limpieza o prepararse para la migración. Mucha suerte, y sí, no olvide realizar pruebas en un entorno que no sea de producción si está creando scripts a gran escala. Más vale prevenir que curar.