Enviar correo electrónico a Office 365 usando el script de PowerShell | Parte 1#2
En las siguientes dos series de artículos, revisamos el tema de cómo utilizar un "script de PowerShell para enviar correo electrónico", que utilizará el servidor de correo de Office 365 como servidor de correo. Los usos más comunes del uso de “Enviar script de PowerShell por correo electrónico” son:
- Probando el proceso de envío de correo electrónico a la infraestructura de correo de Office 365
- Usar el “Script de PowerShell para enviar correo electrónico” con fines de automatización, como enviar un informe diario.
En términos generales, existen dos grandes opciones en las que abordamos la infraestructura de correo de Office 365.
1. Sesión SMTP anónima
2. Sesión SMTP o TLS autenticada.
- En el artículo actual, revisaremos el método que puede eliminarse como: sesión de correo SMTP anónima.
- En el próximo artículo, revisaremos el método que se puede desactivar como sesión de correo TLS autenticada y, además, cómo utilizar el componente del programador de tareas de Windows para utilizar el script de PowerShell de envío de correo electrónico.
Los dos métodos principales para direccionar el servidor de correo de Office 365
Antes de comenzar con las instrucciones exactas sobre cómo crear el "script de PowerShell de envío de correo electrónico" requerido, revisemos brevemente el método mediante el cual el cliente puede dirigirse a los servicios de correo de Office 365.
Cuando queramos direccionar el servidor de correo de Office 365 (Exchange Online), podemos utilizar alguno de los siguientes métodos:
Método 1: dirigirse al servidor de correo de Office 365 mediante una sesión SMTP anónima estándar
Un método en el que el script de PowerShell se dirige al servidor de correo de Office 365 mediante una sesión SMTP (sesión no cifrada).
La sesión SMTP se crea mediante una conexión anónima.
El significado de “Conexión anónima” es que el lado que se dirige al servidor de correo de Office 365 (el script de PowerShell), no proporciona ningún usuario. cartas credenciales.
Ventaja
El principal beneficio de este método es que evitamos el procedimiento de proporcionar credenciales de usuario. La necesidad de proporcionar credenciales está "cegada" a otras tareas, como la necesidad de proteger las credenciales, etc.
Desventajas
Las principales desventajas de utilizar una conexión anónima son que el servidor de correo no puede confiar en el remitente porque éste parece anónimo.
La mayoría de las veces, el correo electrónico que se enviará mediante el script de PowerShell se identificará como correo electrónico falso porque: la dirección de correo electrónico del destinatario de Office 365 que utilizamos como "dirección del remitente" no está autenticada.
Las desventajas adicionales son que cuando utilizamos una "sesión anónima", no podemos enviar un correo electrónico a un "destinatario externo", es decir, a destinatarios cuya dirección de correo electrónico no está alojada en el servidor Exchange Online que aloja nuestro dominio.
La solución a este problema se puede implementar creando un conector de correo entrante de Exchange Online o definiendo diez direcciones de correo electrónico del remitente en la lista blanca de remitentes permitidos.
Si necesita más información sobre cómo crear dicho conector de correo, lea el artículo - Enviar correo a Exchange Online usando una sesión SMTP estándar | Parte 2#4
Método 2: direccionar el servidor de correo de Office 365 mediante sesión TLS + credenciales
Un método en el que el script de PowerShell se dirige al servidor de correo de Office 365 mediante una sesión TLS (sesión cifrada) + proporcionando credenciales de usuario (sesión autenticada).
Ventaja
Proteger el canal de comunicación: cuando se utiliza el protocolo TLS, el canal de comunicación entre el host que envía el correo electrónico y el servidor de correo de Office 365 está cifrado.
Sesión autenticada: la principal ventaja de este método es que cuando proporcionamos las credenciales del destinatario de Office 365, Exchange Online se relaciona con el "remitente" como un remitente confiable.
Por esta razón, no necesitamos agregar una configuración adicional en el lado del servidor de Exchange Online y además, podemos enviar el correo electrónico a destinatarios externos que no están alojados en el servidor de Exchange Online. .
Desventajas
En caso de que queramos utilizar “Enviar script de PowerShell por correo electrónico” como tarea programada, necesitaremos encontrar una solución en la que el script de PowerShell pueda acceder a las credenciales requeridas que se almacenan en un archivo.
¡Mantener las credenciales de usuario, como la contraseña, en un formato no seguro es una mala práctica!
Aunque podemos agregar la contraseña a un archivo de texto no protegido (el archivo PowerShell), esta opción no es recomendable.
La solución para estas "necesidades de seguridad" se implementará mediante un método en el que creamos un archivo de contraseña cifrado e indicamos al "script de PowerShell de envío de correo" que acceda al archivo cifrado y obtenga la contraseña requerida de este archivo.
El procedimiento en el que necesitamos cifrar las credenciales se considera más complicado que el escenario en el que utilizamos una sesión SMTP sin credenciales.
Método 1: direccionar el servidor de correo de Office 365 mediante una sesión SMTP estándar
En esta sección, revisamos cómo crear un “script de PowerShell para enviar correo electrónico” que se dirigirá a Office 365 como un servidor de correo.
En este escenario, crearemos una sesión SMTP estándar y no proporcionaremos ninguna credencial de usuario (conexión anónima).
Las tareas que debemos completar son las siguientes:
- Obtener el nombre de host del servidor de correo al que nos dirigiremos
Necesitaremos “obtener” la información sobre el significado del nombre de host de Exchange Online, el registro MX que representa su nombre de dominio público en Office 365 desde el portal de Office 365 | Configuración de DNS.
- Cree un script de PowerShell que incluirá los parámetros necesarios, como la dirección de correo electrónico del remitente, la dirección de correo electrónico del destinatario, el nombre del servidor de correo, el número de puerto del servidor de correo, las credenciales del usuario, etc.
- Ejecute el “Script de PowerShell para enviar correo electrónico” y verifique que el correo electrónico se haya enviado correctamente al destinatario de destino.
Directrices generales y requisitos para utilizar el script de PowerShell "Enviar correo".
Antes de ejecutar el "script de PowerShell de envío de correo", necesitaremos asegurarnos de que se implementen los siguientes requisitos:
1. Consola PowerShell y Set-ExecutionPolicy
De forma predeterminada, la consola de PowerShell no permite ejecutar un script de PowerShell.
En caso de que no hayamos usado en el pasado la consola de PowerShell existente para ejecutar el script de PowerShell, necesitaremos configurar la consola de PowerShell para "permitir ”Ejecución del script de PowerShell.
En caso de que necesite instrucciones para leer cómo habilitar la ejecución del script de PowerShell, puede utilizar las instrucciones de la siguiente sección
2. Firewall de red y comunicación saliente
El canal de comunicación con el servidor Exchange Online se basa en el puerto 25.
Necesitaremos verificar que nuestro Firewall de red incluya una regla que permita a nuestro escritorio implementar una sesión SMTP (puerto 25) con el servidor de correo de Office 365.
3. Dirección IP dinámica versus estática
En caso de que ejecute el "Enviar script de PowerShell de correo electrónico" desde un escritorio que utiliza una "dirección IP pública dinámica", como la red doméstica, el servidor de correo de Office 365 (Exchange Online) no aceptará las solicitudes de comunicación.
Deberá utilizar un host ubicado en una red que utilice una dirección IP estática para representar los hosts internos.
Descripción del escenario
Para poder demostrar la forma en que utilizamos "Enviar script de PowerShell de correo electrónico" para enviar
correo electrónico a través del servidor de correo de Office 365 (Exchange Online), usaremos el siguiente escenario:
Información de la organización
- El nombre de dominio público de nuestra organización es: o365info.com
- Nuestra infraestructura de correo está alojada en Office 365 (Exchange Online).
Credenciales de usuario
Los destinatarios de Office 365 para quienes usaremos su credencial son -admin@o365info.com
Remitente de origen y destinatario de destino
En nuestro escenario, utilizaremos los siguientes destinatarios:
- La dirección de correo electrónico del remitente es: admin@o365info.com
- La dirección de correo electrónico del destinatario es: admin@o365info.com
Infraestructura de correo de Office 365
En el entorno de Office 365, si queremos utilizar una sesión no autenticada con el servidor de correo de Office 365, necesitaremos localizar el nombre de host de Exchange Online que representa nuestro dominio de registro público en Office 365.
- En nuestro escenario específico, el nombre de host del servidor de correo de Office 365 es: o365info2.mail.protection.outlook.com
Nota: revisaremos cómo obtener información sobre el nombre de host de Exchange Online en la siguiente sección.
- El puerto de comunicación que utilizamos es el 25 (TLS)
Tarea 1#3: Obtener la información sobre el nombre de host del registro MX que representa su nombre de dominio público en Office 365
Para poder obtener el nombre de host del servidor de correo de Office 365 que representa nuestro nombre de dominio público, utilizaremos el portal de administración de Office 365.
- Inicie sesión en el portal de administración de Office 365
- En la barra de menú de la izquierda, seleccione el ícono Configuración
- Seleccione el menú Dominios
En nuestro escenario, seleccionaremos ver la configuración del nombre de dominio: o365info.com haciendo doble clic en el nombre de dominio seleccionado.
En la siguiente captura de pantalla, podemos ver la configuración de DNS del dominio o365info.com.
Copiaremos la información sobre el nombre de host que aparece en el registro MX.
En nuestro escenario, el nombre de host de Exchange Online que representa nuestro dominio es: o365info2.mail.protection.outlook.com
Tarea 2#3: Crear un "script de PowerShell para enviar correo"
Para poder enviar correo electrónico usando PowerShell, usaremos el comando de PowerShell:
Send-MailMessageEl "script de PowerShell para enviar correo" se crea utilizando la siguiente sintaxis de PowerShell:
Send-MailMessage -From <sender> -To <recipient> -Subject "<Subject>" -Body "<Subject>" -SmtpServer <SMTP server> -Port <port number>En nuestro escenario, usaremos la sintaxis del comando PowerShell usando los siguientes parámetros:
Send-MailMessage -From admin@o365info.com -To admin@o365info.com -Subject "Test Email" -Body "Test SMTP Relay Service" -SmtpServer o365info2.mail.protection.outlook.com -Port 25Para crear el script de PowerShell, podemos utilizar cualquier editor de texto.
En nuestro ejemplo, usamos el bloc de notas.
Copiaremos la siguiente información al archivo de texto:
La sintaxis del comando de PowerShell incluye las siguientes partes:
- De (número 1): utilizaremos la dirección de correo electrónico: admin@o365info.com para representar la dirección de correo electrónico del remitente.
- Para (número 2): utilizaremos la dirección de correo electrónico: admin@o365info.com para representar la dirección de correo electrónico del destinatario de destino.
- Asunto (número 3): este es el texto del asunto del correo electrónico
- Cuerpo (número 4): este es el texto que aparecerá en el “cuerpo” del mensaje de correo electrónico
- SmtpServer (número 5): este es el nombre de host o la dirección IP del servidor de correo al que queremos dirigirnos. En nuestro escenario, queremos abordar el servidor Exchange Online como el "servidor de correo". servidor". Proporcionaremos el nombre de host que obtuvimos en el paso anterior: o365info2.mail.protection.outlook.com
- Puerto (número 6): este es el número de puerto del servidor de correo que “escuchará” nuestras solicitudes de comunicación. En el entorno de Office 365, Exchange Online escuchará mediante el puerto 25.
Guardar el archivo de secuencia de comandos de PowerShell
El siguiente paso es guardar el archivo de texto como un script de PowerShell.
Usamos el bloc de notas para crear el script de PowerShell.
En nuestro escenario, nombraremos el script de PowerShell - Sendmail-smtp.ps1
- En la sección - Guardar como tipo”, seleccione la opción - Todos los archivos (*.*).
- La opción adicional recomendada es guardar el script de PowerShell
usando UTF-8
Este no es un requisito obligatorio, pero, según mi experiencia, al guardar el script de PowerShell usando formatos estándar como como ANSI, podemos experimentar un problema cuando intentamos ejecutar el script de PowerShell desde la consola de PowerShell.
En nuestro escenario, guardamos el “Enviar script de PowerShell por correo electrónico” en la carpeta script que hemos creado en la unidad C:
Tarea 3#3: Ejecutar el “script de PowerShell de envío de correo”
Ejecución del script de PowerShell | Configuraciones por primera vez
De forma predeterminada, la consola de PowerShell nos impedirá ejecutar el script de PowerShell.
Para poder ejecutar el script de PowerShell, necesitaremos configurar la política de ejecución de PowerShell predeterminada.
Para poder actualizar la política de exacción de PowerShell existente, debemos ejecutar la consola de PowerShell como administrador.
- Busque el ícono de PowerShell, haga clic derecho en el ícono de la consola de PowerShell y seleccione el menú - Ejecutar como administrador
Aparece una ventana emergente que nos pide que aprobemos la tarea "ejecutar como administrador"
- Haga clic en Sí para aprobar.
Ejecute el siguiente comando de PowerShell:
Set-ExecutionPolicy Unrestricted -forceTarea 2#2: Ejecutar el “Script de PowerShell para enviar correo”
Ejecutaremos “Enviar correo PowerShell” desde la consola de PowerShell, utilizando los siguientes comandos:
- Acceda al script de PowerShell navegando hasta la ruta en la que se encuentra el script de PowerShell.
En nuestro escenario, el script de PowerShell se guarda en la carpeta C:\script.
Escriba el siguiente comando:
cd C:\script- Ejecute el script de PowerShell
Para ejecutar el script de PowerShell, podemos escribir el nombre completo del
script - Sendmail-smtp.ps1 o usar la función autocompletar de PowerShell.
Por ejemplo, para llamar a un script de PowerShell necesitamos escribir los siguientes caracteres: .\, escribir la primera letra del script de PowerShell (“s“) y presionar el botón < tecla fuerte>Tab.
Después de “presionar” la tecla TAB, las consolas de PowerShell, completamos el resto del nombre del script de PowerShell por sí mismo.
Para verificar si el mensaje de correo electrónico se envió correctamente, iniciaremos sesión en el buzón de administración utilizando el cliente de correo OWA.
En la siguiente captura de pantalla, podemos ver que el correo electrónico se envió exitosamente al destinatario de destino, pero es importante enfatizar que el correo electrónico se envió a la
carpeta de correo no deseado.
Este es un resultado esperado porque, como se mencionó, el script de PowerShell usa la identidad del destinatario de Office 365 (admin@o365info.com). Debido a que el script de PowerShell no proporcionó ninguna credencial de usuario, Exchange Online considera el mensaje de correo electrónico como un "correo electrónico sospechoso" y, por esta razón, marca el correo electrónico como basura.
Si desea evitar este escenario, se recomienda crear un conector de Exchange Online que identificará al "remitente de origen" por su dirección IP pública.
Puede leer más sobre esta configuración en el artículo: Enviar correo a Exchange Online usando una sesión SMTP estándar | Parte 2#4
El próximo artículo de la serie de artículos actual.
Envíe un correo electrónico a Office 365 usando el script de PowerShell y la contraseña cifrada guardada |Parte 2#2











