Envía correo electrónico con Mailjet


Mailjet es un servicio de correo electrónico global de terceros que ofrece a los usuarios de Compute Engine un nivel gratuito con 6,000 correos electrónicos cada mes. Además, Mailjet ofrece las siguientes características:

  • Una API, una interfaz de usuario y la retransmisión de SMTP para enviar correos electrónicos transaccionales y de marketing
  • Cumplimiento de las normas europeas de protección de datos
  • Funciones de correo electrónico y capacidad de entrega, como configuración de prioridad personalizable y administración de regulación automatizada
  • Una biblioteca de recursos API en Go, PHP, Nodejs, Java, Python y Ruby para administrar cuentas secundarias, autenticación, contactos, campañas, cargas útiles personalizadas, estadísticas, eventos en tiempo real y análisis mediante la API de Eventos
  • Un marco de trabajo MJML integrado para crear plantillas de correo electrónico HTML responsivas.
  • Asistencia las 24 horas, todos los días, en cualquier lugar del mundo y en más de 4 idiomas
  • La capacidad para enviar mensajes de correo electrónico desde dominios que no sean gmail.com

En este documento, se describe cómo configurar tu instancia de VM para enviar correos electrónicos mediante Mailjet con los siguientes métodos:

  • Mediante una retransmisión SMTP con uno de estos servidores:
  • De manera directa a través de la API de Mailjet que usa Java

Para obtener una amplia documentación sobre otras soluciones de correo electrónico, incluidos ejemplos de integración con los servidores SMTP, las bibliotecas y los marcos de trabajo más comunes, consulta la documentación de Mailjet .

Antes de comenzar

  1. Crea una cuenta de Mailjet nueva en la página de socio de Google* de Mailjet. Cuando te registres, proporciona el dominio y la dirección de correo electrónico desde la que deseas enviar los mensajes de correo electrónico.

  2. Obtén las credenciales de tu cuenta SMTP de Mailjet.

  3. Asegúrate de que la dirección desde la que deseas enviar los correos electrónicos se haya validado.

  4. Configura una regla de firewall para permitir el tráfico de TCP en el puerto 2525.

* Google recibe compensaciones por los clientes que se registran para una cuenta no gratuita.

Configura Mailjet como una retransmisión de SMTP

La configuración de Mailjet como servicio de retransmisión de correo te permite reenviar mensajes de correo electrónico a Mailjet para la entrega remota.

Usa Postfix

  1. Conéctate a tu VM mediante SSH y reemplaza instance-name por el nombre de la instancia desde la que deseas enviar los mensajes de correo electrónico:

    gcloud compute ssh instance-name
  2. En la VM, instala el agente de transporte de correos de Postfix. Cuando se te solicite, acepta las opciones predeterminadas para los nombres de dominio, pero selecciona la configuración Local Only.

    Debian

    sudo apt update && sudo apt -y install postfix libsasl2-modules
    

    CentOS

    sudo yum install postfix cyrus-sasl-plain cyrus-sasl-md5 -y
    

  3. Modifica las opciones de configuración de Postfix. Las opciones de configuración de Postfix se establecen en el archivo main.cf. Abre el archivo con el editor de texto que prefieras:

    sudo vi /etc/postfix/main.cf
    
  4. Actualiza el archivo:

    1. Comenta las siguientes líneas:

      # default_transport = error
      # relay_transport = error
      
    2. Agrega las siguientes líneas al final del archivo:

      relayhost = in-v3.mailjet.com:2525
      smtp_tls_security_level = encrypt
      smtp_sasl_auth_enable = yes
      smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
      smtp_sasl_security_options = noanonymous
      

      En estas líneas, se aplica la compatibilidad con SSL/TLS y se configura la autenticación SMTP para estas solicitudes. Un módulo simple de acceso y capa de seguridad (SASL) maneja la autenticación en la configuración de Postfix.

    3. Guarda los cambios y cierra el archivo.

  5. Crea el mapa de contraseñas SASL con el editor de texto que prefieras:

    sudo vi /etc/postfix/sasl_passwd
    
  6. Agrega las siguientes líneas al archivo sasl_passwd a fin de proporcionar las credenciales para Mailjet:

    in-v3.mailjet.com:2525 YOUR_API_KEY:YOUR_SECRET_KEY
    
  7. Usa la utilidad postmap para generar un archivo .db:

    sudo postmap /etc/postfix/sasl_passwd
    sudo ls -l /etc/postfix/sasl_passwd*
    

    Deberías recibir la siguiente respuesta:

    -rw------- 1 root root    68 Jun  1 10:50 /etc/postfix/sasl_passwd
    -rw------- 1 root root 12288 Jun  1 10:51 /etc/postfix/sasl_passwd.db
    
  8. A continuación, quita el archivo que contiene tus credenciales porque ya no es necesario:

    sudo rm /etc/postfix/sasl_passwd
    
  9. Establece los permisos en tu archivo .db:

    sudo chmod 600 /etc/postfix/sasl_passwd.db
    sudo ls -la /etc/postfix/sasl_passwd.db
    
  10. Por último, vuelve a cargar tu configuración para cargar los parámetros modificados:

    Debian

    sudo /etc/init.d/postfix restart
    

    CentOS

    sudo postfix reload
    

  11. Prueba la configuración. Instala el paquete mailx o mailutils y prueba tu configuración.

    Debian

    sudo apt -y install mailutils
    

    CentOS

    sudo yum install mailx -y
    

    Envía un mensaje de prueba:

    echo 'Test passed.' | mail -s 'Test-Email' -aFrom:from-email destination-email

    Reemplaza lo siguiente:

    • from-email: Una dirección de correo electrónico que se validó
    • destination-email: La dirección a la que se envía el mensaje de correo electrónico

    Busca en los registros del sistema una línea de estado que contenga status y el código de respuesta correcto del servidor (250):

    Debian

    sudo tail -n 5 /var/log/syslog
    

    En CentOS

    sudo tail -n 5 /var/log/maillog
    

Si tienes problemas para configurar Postfix con Mailjet, consulta las instrucciones de configuración de Postjet de Mailjet.

Con Nodemailer

En las siguientes instrucciones, se describe cómo usar Mailjet con Node.js en Debian Wheezy.

Debian
  1. Conéctate a tu instancia con SSH:
    gcloud compute ssh instance-name
  2. Actualiza los repositorios de tus paquetes:
    user@test-wheezy:~# sudo apt update
  3. Instala las dependencias de Node.js:
    user@test-wheezy:~# sudo apt -y install git-core curl build-essential openssl libssl-dev
  4. Clona el repositorio de Node.js desde github:
    user@test-wheezy:~# git clone https://github.com/nodejs/node
  5. Cambia el directorio al árbol fuente de Node.js:
    user@test-wheezy:~# cd node
  6. Configura el software de nodo para este SO y máquina virtual:
    user@test-wheezy:~# ./configure
  7. Compila Node.js, npm y objetos relacionados:
    user@test-wheezy:~# sudo make

    Esto puede tardar unos minutos en completarse.

  8. Instala Node.js, npm y otro software en la ubicación predeterminada:
    user@test-wheezy:~# sudo make install
  9. Instala el paquete de correo electrónico:
    user@test-wheezy:~# npm install nodemailer nodemailer-smtp-transport
  10. En el directorio node, crea un archivo nuevo con el nombre sendmail.js que contenga el siguiente JavaScript:
    const mailer = require('nodemailer');
    const smtp = require('nodemailer-smtp-transport');
    
    async function mailjet() {
      const transport = mailer.createTransport(
        smtp({
          host: 'in.mailjet.com',
          port: 2525,
          auth: {
            user: process.env.MAILJET_API_KEY || '<your-mailjet-api-key',
            pass: process.env.MAILJET_API_SECRET || '<your-mailjet-api-secret>',
          },
        })
      );
    
      const json = await transport.sendMail({
        from: 'ANOTHER_EMAIL@ANOTHER_EXAMPLE.COM', // From address
        to: 'EMAIL@EXAMPLE.COM', // To address
        subject: 'test email from Node.js on Google Cloud Platform', // Subject
        text: 'Hello!\n\nThis a test email from Node.js.', // Content
      });
      console.log(json);
    }
    mailjet();
  11. Ejecuta el programa para enviar un mensaje de correo electrónico a través de Mailjet:
    user@test-wheezy:~# node sendmail.js
CentOS
  1. Conéctate a tu instancia con SSH:
    gcloud compute ssh instance-name
  2. Actualiza los repositorios de paquetes:
    user@test-centos:~# sudo yum update -y
  3. Instala las dependencias de Node.js:
    user@test-centos:~# sudo yum install git-core curl openssl openssl-dev -y
    ...
    user@test-centos:~# sudo yum groupinstall "Development Tools" -y
    ...
  4. Clona el repositorio de Node.js desde github:
    user@test-centos:~# git clone https://github.com/nodejs/node
  5. Cambia el directorio al árbol fuente de Node.js:
    user@test-centos:~# cd node
  6. Configura el software de nodo para este SO y máquina virtual:
    user@test-centos:~# ./configure
  7. Compila Node.js, npm y objetos relacionados:
    user@test-centos:~# sudo make

    Esto puede tardar unos minutos en completarse.

  8. Instala Node.js, npm y otro software en la ubicación predeterminada:
    user@test-centos:~# sudo make install
  9. Instala el paquete de correo electrónico:
    user@test-centos:~# npm install npm install nodemailer nodemailer-smtp-transport
  10. En el directorio node, crea un archivo nuevo con el nombre sendmail.js que contenga el siguiente JavaScript:
    const mailer = require('nodemailer');
    const smtp = require('nodemailer-smtp-transport');
    
    async function mailjet() {
      const transport = mailer.createTransport(
        smtp({
          host: 'in.mailjet.com',
          port: 2525,
          auth: {
            user: process.env.MAILJET_API_KEY || '<your-mailjet-api-key',
            pass: process.env.MAILJET_API_SECRET || '<your-mailjet-api-secret>',
          },
        })
      );
    
      const json = await transport.sendMail({
        from: 'ANOTHER_EMAIL@ANOTHER_EXAMPLE.COM', // From address
        to: 'EMAIL@EXAMPLE.COM', // To address
        subject: 'test email from Node.js on Google Cloud Platform', // Subject
        text: 'Hello!\n\nThis a test email from Node.js.', // Content
      });
      console.log(json);
    }
    mailjet();
  11. Ejecuta el programa para enviar un mensaje de correo electrónico a través de Mailjet:
    user@test-centos:~# node sendmail.js

Envía correos electrónicos con la API de Mailjet con Java

Para obtener más ejemplos del uso de la API de Mailjet, consulta la documentación oficial de Mailjet.

Debian
  1. Conéctate a tu instancia con SSH:
    gcloud compute ssh instance-name
  2. Actualiza los repositorios de paquetes y, luego, instala los paquetes obligatorios:
    user@test-instance:~# sudo apt update && sudo apt install git-core openjdk-8-jdk maven
  3. Clona el repositorio de Java desde GitHub:
    user@test-instance:~# git clone https://github.com/GoogleCloudPlatform/java-docs-samples.git
  4. Ve al código fuente principal para obtener el ejemplo, ubicado aquí:
    /root/java-docs-samples/compute/mailjet/src/main/java/com/example/compute/mailjet
  5. Establece tu configuración de Mailjet. Consulta la documentación de Authentication de Mailjet para reemplazar las siguientes variables:

    • your-mailjet-api-key: Una clave de API para tu cuenta de Mailjet.
    • your-mailjet-secret-key: La clave secreta correspondiente para tu cuenta de Mailjet.

    public class MailjetSender {
    
      public static void main(String[] args) throws MailjetException {
        final String mailjetApiKey = "YOUR-MAILJET-API-KEY";
        final String mailjetSecretKey = "YOUR-MAILJET-SECRET-KEY";
        ClientOptions options =
            ClientOptions.builder().apiKey(mailjetApiKey).apiSecretKey(mailjetSecretKey).build();
        MailjetClient client = new MailjetClient(options);
    
        MailjetSender sender = new MailjetSender();
        sender.sendMailjet(args[0], args[1], client);
      }
    
      public MailjetResponse sendMailjet(String recipient, String sender, MailjetClient client)
          throws MailjetException {
        MailjetRequest email =
            new MailjetRequest(Emailv31.resource)
                .property(
                    Emailv31.MESSAGES,
                    new JSONArray()
                        .put(
                            new JSONObject()
                                .put(
                                    Emailv31.Message.FROM,
                                    new JSONObject().put("Email", sender).put("Name", "pandora"))
                                .put(
                                    Emailv31.Message.TO,
                                    new JSONArray().put(new JSONObject().put("Email", recipient)))
                                .put(Emailv31.Message.SUBJECT, "Your email flight plan!")
                                .put(
                                    Emailv31.Message.TEXTPART,
                                    "Dear passenger, welcome to Mailjet!" 
                                    + "May the delivery force be with you!")
                                .put(
                                    Emailv31.Message.HTMLPART,
                                    "<h3>Dear passenger, welcome to Mailjet!</h3>"
                                    + "<br />May the delivery force be with you!")));
    
        try {
          // trigger the API call
          MailjetResponse response = client.post(email);
          // Read the response data and status
          System.out.println(response.getStatus());
          System.out.println(response.getData());
          return response;
        } catch (MailjetException e) {
          System.out.println("Mailjet Exception: " + e);
          return null;
        }
      }
    }
  6. Desde el directorio mailjet, usa Maven para empaquetar la clase como un archivo JAR:
    user@test-instance:~# mvn clean package
  7. Asegúrate de usar OpenJDK 8:
    user@test-instance:~# sudo update-alternatives --config java
  8. Para enviar un correo electrónico, desde el directorio de destino, ejecuta el archivo JAR con tus direcciones de correo electrónico de destinatario y remitente como argumentos:
    user@test-instance:~# java -jar
            compute-mailjet-1.0-SNAPSHOT-jar-with-dependencies.jar
            recipient-email sender-email
CentOS
  1. Conéctate a tu instancia con SSH:
    gcloud compute ssh instance-name
  2. Actualiza los repositorios de paquetes y, luego, instala los paquetes obligatorios:
    user@test-centos:~# sudo yum update && sudo yum install git-core openjdk-8-jdk maven
  3. Clona el repositorio de Java desde GitHub:
    user@test-centos:~# git clone https://github.com/GoogleCloudPlatform/java-docs-samples.git
  4. Ve al código fuente principal para obtener el ejemplo, ubicado aquí:
    /root/java-docs-samples/compute/mailjet/src/main/java/com/example/compute/mailjet
  5. Establece tu configuración de Mailjet. Para obtener información sobre cómo reemplazar las siguientes variables, consulta la documentación de Authentication de Mailjet:

    • your-mailjet-api-key: Una clave de API para tu cuenta de Mailjet.
    • your-mailjet-secret-key: La clave secreta correspondiente para tu cuenta de Mailjet.

    public class MailjetSender {
    
      public static void main(String[] args) throws MailjetException {
        final String mailjetApiKey = "YOUR-MAILJET-API-KEY";
        final String mailjetSecretKey = "YOUR-MAILJET-SECRET-KEY";
        ClientOptions options =
            ClientOptions.builder().apiKey(mailjetApiKey).apiSecretKey(mailjetSecretKey).build();
        MailjetClient client = new MailjetClient(options);
    
        MailjetSender sender = new MailjetSender();
        sender.sendMailjet(args[0], args[1], client);
      }
    
      public MailjetResponse sendMailjet(String recipient, String sender, MailjetClient client)
          throws MailjetException {
        MailjetRequest email =
            new MailjetRequest(Emailv31.resource)
                .property(
                    Emailv31.MESSAGES,
                    new JSONArray()
                        .put(
                            new JSONObject()
                                .put(
                                    Emailv31.Message.FROM,
                                    new JSONObject().put("Email", sender).put("Name", "pandora"))
                                .put(
                                    Emailv31.Message.TO,
                                    new JSONArray().put(new JSONObject().put("Email", recipient)))
                                .put(Emailv31.Message.SUBJECT, "Your email flight plan!")
                                .put(
                                    Emailv31.Message.TEXTPART,
                                    "Dear passenger, welcome to Mailjet!" 
                                    + "May the delivery force be with you!")
                                .put(
                                    Emailv31.Message.HTMLPART,
                                    "<h3>Dear passenger, welcome to Mailjet!</h3>"
                                    + "<br />May the delivery force be with you!")));
    
        try {
          // trigger the API call
          MailjetResponse response = client.post(email);
          // Read the response data and status
          System.out.println(response.getStatus());
          System.out.println(response.getData());
          return response;
        } catch (MailjetException e) {
          System.out.println("Mailjet Exception: " + e);
          return null;
        }
      }
    }
  6. Desde el directorio mailjet, usa Maven para empaquetar la clase como un archivo JAR:
    user@test-centos:~# mvn clean package
  7. Asegúrate de usar OpenJDK 8:
    user@test-centos:~# sudo alternatives --config java
  8. Para enviar un correo electrónico, desde el directorio de destino, ejecuta el archivo JAR con tus direcciones de correo electrónico de destinatario y remitente como argumentos:
    user@test-centos:~# java -jar
            compute-mailjet-1.0-SNAPSHOT-jar-with-dependencies.jar
            recipient-email sender-email

Configuración de SMTP de Mailjet

Esta es una referencia rápida a la configuración SMTP específica de Mailjet que se usa para configurar los clientes:

  • Host: in-v3.mailjet.com
  • Puerto: 2525

¿Qué sigue?

Explora arquitecturas de referencia, diagramas y prácticas recomendadas sobre Google Cloud. Consulta nuestro Cloud Architecture Center.