Desacopla tu aplicación del envío de correos con SendGrid y Microsoft Azure

En varias ocasiones, sobre todo en entornos legacy, nos encontramos con aplicaciones que llevan sobre su espaldas más responsabilidades de las que realmente les corresponde a día de hoy, obligando al desarrollador a mantener un mayor número de funcionalidades que, en un entorno actual orientado a servicios, desacoplándolas podría facilitar el mantenimiento de la aplicación y hacer que esta escale más fácilmente.

Para este post voy a mostrarte cómo trabajar con el servicio de SendGrid desde Microsoft Azure, donde podrás podrás disfrutar del envío de 25.000 correos mensuales de forma gratuita, que en muchos casos es más que suficiente.

Desde el portal de Microsoft Azure, haz clic en New y busca SendGrid:

SendGrid - Microsoft Azure Marketplace
SendGrid – Microsoft Azure Marketplace

La configuración es bastante sencilla. Debes elegir un nombre para tu servicio, una contraseña, el plan Free y aceptar los términos legales del servicio.

Una vez completada la creación del servicio, el último paso que debes dar a nivel de configuración de SendGrid es la creación de una API Key para permitir a tu aplicación el acceso a sus APIs. Para ello, haz clic en el botón Manage en el blade principal, que te llevará a la página de administración de SendGrid.

Microsoft Azure - SendGrid - Manage
Microsoft Azure – SendGrid – Manage

Accede al apartado SETTINGS > API Keys del menú lateral y crea una nueva API Key a través del botón Create API Key.

SendGrid - Add New General API Key
SendGrid – Add New General API Key

Para este ejemplo sólo he dado acceso al apartado Mail Send, pero, como puedes ver, es posible acceder a otras características relacionadas con las estadísticas del servicio.

En este post voy a mostrar tanto en .NET como en Java cómo sería posible el envío.

El ejemplo más simple con .NET sería el siguiente: Instala el paquete de Nuget de SendGrid y utiliza el siguiente código para el envío:

using System.Net.Mail;
using System.Net;
using System;

namespace SendGrid
{
    class Program
    {
        static void Main(string[] args)
        {
            var myEmail = new SendGridMessage
            {
                From = new MailAddress(Settings.Default.From),
                Subject = "Hello from SendGrid!",
                Html = "<h1>Hello World</h1>",
                Text = "Hello plain text World"
            };

            myEmail.AddTo(Settings.Default.To);            

            var credentials = new NetworkCredential(Settings.Default.SendGridUser, Settings.Default.SendGridPassword);
            var transportWeb = new Web(Settings.Default.SendGridApiKey);

            transportWeb.DeliverAsync(myEmail).Wait();

            Console.WriteLine("Mail sent!");

            Console.ReadLine();
        }
    }
}

El objeto SendGridMessage es el que construye el email que quieres enviar. El nombre de usuario puedes localizarlo en el apartado Settings > Configurations del portal de Azure.

Microsoft Azure - SendGrid - Settings - Configurations
Microsoft Azure – SendGrid – Settings – Configurations

El resultado del código anterior sería este:

SendGrid result
SendGrid result

Desde el punto de vista de Java el código es bastante similar. Disponemos del repositorio para Maven, del cual te hablé en el post de ayer, donde bastaría con añadir la dependencia en el archivo pom.xml.

<project>
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.returngis</groupId>
    <artifactId>HelloWorld</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>jar</packaging>
    <dependencies>
       <dependency>
    <groupId>com.sendgrid</groupId>
    <artifactId>sendgrid-java</artifactId>
    <version>2.2.2</version>
   </dependency>
 </dependencies>  
</project>

Una vez hecho esto, crea una clase que se encargue de enviar el correo:

import com.sendgrid.*;

public class HelloWorld{

    public static void main(String args[])
    {
        System.out.println("Hello World!");
        
        SendGrid sendgridService = new SendGrid("YOUR_API_KEY");
        
        SendGrid.Email myEmail = new SendGrid.Email();
        myEmail.addTo("TO_EMAIL");
        myEmail.setFrom("FROM_EMAIL");
        myEmail.setSubject("Hello World from SendGrid in Java code");
        myEmail.setText("Hello World from SendGrid in Java!");
        
        try{
            SendGrid.Response response = sendgridService.send(myEmail);
            
            System.out.println(response.getMessage());
        }
        catch (SendGridException  e){
            System.err.println(e);
        }        
    }    
}

Después de hacer las pruebas necesarias con el lenguaje que prefieras, te recomiendo que eches un vistazo al portal de SendGrid, en el apartado de actividad,  donde comenzarán a aparecer las estadísticas sobre los correos enviados.

SendGrid - Activity Feed
SendGrid – Activity Feed

Además, existe un content pack para Power BI si eres un amante de esta herramienta tanto como yo.

¡Saludos!