Azure, SMTP y PowerShell
Me encontré con la necesidad de utilizar algún servicio de envío SMTP en Azure. La idea es poder enviar correos informando sobre ciertas acciones o situaciones de deploy, para una solución en particular. Dentro de todo lo que ofrece Azure, existe un servicio de terceros (no es el único) para realizar el envío SMTP de forma gratuita. Éste servicio ofrece enviar sin costo adicional hasta 25.000 correos por mes con la suscripción free.
El servicio es ofrecido por la empresa SendGrid y puede utilizarse también fuera de Azure.
Ahora bien, que necesitamos para poder utilizar el servicio? Primero, habilitarlo en Azure…
Desplegar SendGrid en Azure
Para desplegar el servicio, debemos desde el portal buscar lo siguiente: SendGrid Email Delivery y seleccionar create.
Completamos el asistente con datos simples como contraseña, nombre y fundamental: el tipo de suscripción (free!). Ya con lo anterior, si revisamos el recurso que se muestra en el resource group tenemos lo siguiente:
Mandar el primer mail
Obviamente vamos a utilizar PowerShell para realizar el envío de mail, pero de que manera? A través de Azure Functions…
Como el sentido del post no es avanzar sobre Azure Functions, adjunto una entrada anterior que habla al respecto del tema:
https://blog.victorsilva.com.uy/azure-functions/
No importa el tipo de template que utilicemos para generar la function app, el sentido del post es utilizar el servicio de SMTP principalmente. Para el ejemplo utilicé el template Timer trigger.
Continuando con la estructura de lo que nos interesa, pasamos a ver el código.
Lo primero es destacar que cmdlet vamos a usar. Para enviar un mail tenemos Send-MailMessage. Con el cmdlet anterior vamos a necesitar ciertos valores que serán nuestras variables:
$userName
$password
$smtpServer
$emailFrom
$emailTo
$subject
$body
Al ser información sensible, lo recomendado es utilizar algún mecanismo para poder proteger estos datos. Para ello utilizamos la sección de Application Settings dentro de la function app creada.
De esta manera almacenamos información del tipo clave-valor utilizando el botón +Add new setting como indica la siguiente imagen:
Ahora que tenemos esos valores dentro de un entorno más seguro, resta definir como trabajamos sobre ellas.
Al estar trabajando sobre PowerShell, todas las AppSettings se almacenan con la siguiente estructura:
$ENV:APPSETTING_<setting>
En resumen, tendríamos que definir las variables con la información necesaria, generar las credenciales y utilizar el cmdlet Send-MailMessage para enviar un correo de prueba:
Simple, no? Para el ejemplo ya tenemos configurado un sistema de envío de correos utilizando Azure Functions y SendGrid.
Happy scripting!
Comments