Enviar correo electrónico con Office 365 Direct Send y PowerShell

¿Sabías que puedes usar Office 365 para enviar correos electrónicos con PowerShell? En este artículo, aprenderás cómo enviar correos electrónicos con el envío directo de Office 365 y el cmdlet Send-MailMessage de PowerShell.

Si deseas obtener una explicación detallada sobre cómo enviar correos electrónicos con PowerShell, echa un vistazo a este tutorial detallado sobre Send-MailMessage.

Envío directo de Office 365 vs. Envío de cliente SMTP

Antes de adentrarnos demasiado en PowerShell, ten en cuenta que no hay una sola forma de enviar correos electrónicos a través de Office 365 usando PowerShell. Office 365 tiene dos formas admitidas de enviar correos electrónicos. Esas opciones son Envío directo y Envío de cliente SMTP o Envío autenticado SMTP.

Envío autenticado SMTP

El envío autenticado SMTP es el más fácil de configurar. Elegirías esta opción si planeas enviar correos electrónicos desde un dispositivo o aplicación a destinatarios dentro y fuera de tu organización. No hay ninguna acción adicional que hacer en Office 365 para permitir esto.

Esta opción te permite usar cualquier dirección de remitente. Pero la dirección debe ser de uno de tus dominios aceptados verificados.

Para usar Envío autenticado SMTP, debes:

  • Tener un buzón de usuario de Office 365 (licenciado). Esta dirección de correo electrónico aparecerá como el remitente del mensaje.
  • PowerShell (u otro cliente) debe ser capaz de resolver y alcanzar smtp.office365.com.
  • El puerto TCP 587 o 25 debe estar abierto a Office 365 desde el cliente.

Envío directo

Aumentando un poco la complejidad está la opción de Envío Directo. Al igual que Envío Autenticado SMTP, Envío Directo te permite usar cualquier dirección de remitente. Además, la dirección de remitente debe ser de uno de tus dominios verificados aceptados.

La gran diferencia entre Envío Directo y Envío Autenticado SMTP es que no se permiten destinatarios externos. Si necesitas enviar a destinatarios de correo electrónico fuera de tu organización, Envío Directo no funcionará para ti.

Envío Directo tiene algunos de sus propios requisitos/recomendaciones:

  • Esta dirección de remitente no tiene que ser un buzón válido. Pero es necesario si planeas recibir NDR o respuestas usando esta dirección.
  • El Puerto TCP 25 está abierto desde tu cliente a Office 365.
  • El dispositivo debe poder resolver y alcanzar la URL de tu punto final MX (por ejemplo, tu-dominio-com.mail.protection.outlook.com)
  • A static public IP address. This is to update your SPF record and avoid your messages getting flagged as spam (optional but recommended)

Si no sabes cómo encontrar la URL de tu punto final MX, aquí tienes un tutorial rápido:

  1. Inicia sesión en el Portal de administración de Office 365.
  2. Haz clic en Configuración (1), selecciona Domínios (2), haz clic en el Nombre de dominio (3), copia la Dirección o valor apuntado al MX (4).
Finding Office 365 MX Endpoint URL

Envío Autenticado SMTP

El primer método para enviar correo electrónico es a través de Envío de Cliente SMTP o Envío Autenticado SMTP. Usando el cmdlet Send-MailMessage de PowerShell, podemos proporcionar todos los parámetros que necesitamos para enviar correo electrónico a través de Office 365.

A continuación se muestra un fragmento que puedes usar para enviar correos electrónicos mediante este método.

Primero necesitarás definir un objeto PowerShell PScredential y luego proporcionar todos los parámetros que necesita Send-MailMessage.

# Obtener las credenciales
$credential = Get-Credential

## Definir los parámetros de Send-MailMessage
$mailParams = @{
    SmtpServer                 = 'smtp.office365.com'
    Port                       = '587' # o '25' si no se usa TLS
    UseSSL                     = $true ## o nada si se usa no-TLS
    Credential                 = $credential
    From                       = '[email protected]'
    To                         = '[email protected]', '[email protected]'
    Subject                    = "SMTP Client Submission - $(Get-Date -Format g)"
    Body                       = 'This is a test email using SMTP Client Submission'
    DeliveryNotificationOption = 'OnFailure', 'OnSuccess'
}

## Enviar el mensaje
Send-MailMessage @mailParams

Cuando ejecutes el código anterior, deberías recibir un correo electrónico enviado al destinatario interno (yourdomain.com) y al dominio externo (notyourdomain.com).

Internal Email
External email

Envío Directo (TLS Requerido)

Similar a SMTP Autenticado para Envío, puedes usar casi los mismos parámetros para Send-MailMessage. Sin embargo, esta vez, los destinatarios del To serán solo internos.

También observa que no se necesitaba una PSCredential.

## Construir parámetros
$mailParams = @{
    SmtpServer                 = '<tenant>.mail.protection.outlook.com'
    Port                       = '25'
    UseSSL                     = $true   
    From                       = '[email protected]'
    To                         = '[email protected]'
    Subject                    = "Direct Send $(Get-Date -Format g)"
    Body                       = 'This is a test email using Direct Send'
    DeliveryNotificationOption = 'OnFailure', 'OnSuccess'
}

## Enviar el correo electrónico
Send-MailMessage @mailParams
Direct Send email

Resumen

Puedes ver que Office 365 proporciona dos opciones diferentes para enviar correos electrónicos. En este artículo, utilizamos PowerShell como ejemplo para demostrar ambos. Pero no es necesario que uses PowerShell. Siempre que tu aplicación o lenguaje de programación admita autenticación TLS, puedes usar cualquier método que desees.

Lectura adicional

Source:
https://adamtheautomator.com/office-365-direct-send/