Enviar correos electrónicos 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 6000 correos al mes. Además, Mailjet también ofrece lo siguiente:

  • Una API, una interfaz de usuario y un relay SMTP para enviar correos transaccionales y de marketing.
  • Cumplimiento de la normativa de privacidad de datos europea.
  • Funciones de correo y de entrega, como ajustes de prioridad personalizables y gestión automática de la limitación.
  • Biblioteca de recursos de la API en Go, PHP, Node.js, Java, Python y Ruby para gestionar subcuentas, autenticación, contactos, campañas, cargas útiles personalizadas, estadísticas, eventos en tiempo real y análisis a través de la API Event.
  • Framework MJML integrado para crear plantillas de correo HTML adaptables.
  • Asistencia las 24 horas en más de 4 idiomas.
  • Posibilidad de enviar mensajes de correo desde dominios distintos a gmail.com.

En este documento se describe cómo configurar tu instancia de VM para enviar correo a través de Mailjet mediante los siguientes métodos:

  • A través de un relay SMTP con:
  • Directamente a través de la API de Mailjet con Java

Para consultar documentación detallada sobre otras soluciones de correo electrónico, incluidos ejemplos de integración con los servidores, bibliotecas y frameworks SMTP más habituales, consulta la documentación de Mailjet.

Antes de empezar

  1. Crea una cuenta de Mailjet en la página de partner de Google* de Mailjet. Cuando te registres, indica el dominio y la dirección de correo desde los que quieras enviar mensajes.

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

  3. Asegúrate de que la dirección de correo desde la que quieres enviar correos se haya validado.

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

* Google recibe una compensación por los clientes que se registran en una cuenta de pago.

Configurar Mailjet como relay SMTP

Configurar Mailjet como un relay de correo te permite reenviar mensajes de correo a Mailjet para que se entreguen de forma remota.

Usar Postfix

  1. Conéctate a tu VM mediante SSH y sustituye instance-name por el nombre de la instancia desde la que quieras enviar mensajes de correo:

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

    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 definen en el archivo main.cf. Abre el archivo con el editor de texto que prefieras:

    sudo vi /etc/postfix/main.cf
    
  4. Para actualizar el archivo, sigue estos pasos:

    1. Comenta las siguientes líneas:

      # default_transport = error
      # relay_transport = error
      
    2. Añade 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
      

      Estas líneas aplican la compatibilidad con SSL/TLS y configuran la autenticación SMTP para estas solicitudes. Un módulo de nivel de seguridad y acceso simples (SASL) gestiona 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. En el archivo sasl_passwd, añade las siguientes líneas para proporcionar las credenciales de 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, elimina el archivo que contiene tus credenciales, ya que no es necesario:

    sudo rm /etc/postfix/sasl_passwd
    
  9. Define los permisos del archivo .db:

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

    Debian

    sudo /etc/init.d/postfix restart
    

    CentOS

    sudo postfix reload
    

  11. Prueba tu 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

    Haz los cambios siguientes:

    • from-email: una dirección de correo que se haya validado.
    • destination-email: la dirección a la que se enviará el mensaje de correo.

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

    Debian

    sudo tail -n 5 /var/log/syslog
    

    CentOS

    sudo tail -n 5 /var/log/maillog
    

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

Usar Nodemailer

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

Debian
  1. Conéctate a tu instancia mediante SSH:
    gcloud compute ssh instance-name
  2. Actualiza los repositorios de 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 de GitHub:
    user@test-wheezy:~# git clone https://github.com/nodejs/node
  5. Cambia el directorio al árbol de origen de Node.js:
    user@test-wheezy:~# cd node
  6. Configura el software de nodo para este SO y esta máquina virtual:
    user@test-wheezy:~# ./configure
  7. Compila Node.js, npm y los objetos relacionados:
    user@test-wheezy:~# sudo make

    Este proceso 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 mailer:
    user@test-wheezy:~# npm install nodemailer nodemailer-smtp-transport
  10. En el directorio node, crea un archivo llamado sendmail.js que contenga el siguiente código 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 correo a través de Mailjet:
    user@test-wheezy:~# node sendmail.js
CentOS
  1. Conéctate a tu instancia mediante 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 de GitHub:
    user@test-centos:~# git clone https://github.com/nodejs/node
  5. Cambia el directorio al árbol de origen de Node.js:
    user@test-centos:~# cd node
  6. Configura el software de nodo para este SO y esta máquina virtual:
    user@test-centos:~# ./configure
  7. Compila Node.js, npm y los objetos relacionados:
    user@test-centos:~# sudo make

    Este proceso 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 mailer:
    user@test-centos:~# npm install npm install nodemailer nodemailer-smtp-transport
  10. En el directorio node, crea un archivo llamado sendmail.js que contenga el siguiente código 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 correo a través de Mailjet:
    user@test-centos:~# node sendmail.js

Enviar correos a través de la API de Mailjet con Java

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

Debian
  1. Conéctate a tu instancia mediante SSH:
    gcloud compute ssh instance-name
  2. Actualiza los repositorios de paquetes e instala los paquetes necesarios:
    user@test-instance:~# sudo apt update && sudo apt install git-core openjdk-8-jdk maven
  3. Clona el repositorio de Java de GitHub:
    user@test-instance:~# git clone https://github.com/GoogleCloudPlatform/java-docs-samples.git
  4. Ve al código fuente principal del ejemplo, que se encuentra en:
    /root/java-docs-samples/compute/mailjet/src/main/java/com/example/compute/mailjet
  5. Configura los ajustes de Mailjet. Consulta la documentación de autenticación de Mailjet para saber cómo sustituir las siguientes variables:

    • your-mailjet-api-key: una clave de API para tu cuenta de Mailjet.
    • your-mailjet-secret-key: la clave secreta correspondiente a 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. En el directorio mailjet, usa Maven para empaquetar la clase como un archivo JAR:
    user@test-instance:~# mvn clean package
  7. Asegúrate de que estás usando OpenJDK 8:
    user@test-instance:~# sudo update-alternatives --config java
  8. Para enviar un correo, desde el directorio de destino, ejecuta el archivo JAR con las direcciones de correo del destinatario y del 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 mediante SSH:
    gcloud compute ssh instance-name
  2. Actualiza los repositorios de paquetes e instala los paquetes necesarios:
    user@test-centos:~# sudo yum update && sudo yum install git-core openjdk-8-jdk maven
  3. Clona el repositorio de Java de GitHub:
    user@test-centos:~# git clone https://github.com/GoogleCloudPlatform/java-docs-samples.git
  4. Ve al código fuente principal del ejemplo, que se encuentra en:
    /root/java-docs-samples/compute/mailjet/src/main/java/com/example/compute/mailjet
  5. Configura los ajustes de Mailjet. Para obtener información sobre cómo sustituir las siguientes variables, consulta la documentación de autenticación de Mailjet:

    • your-mailjet-api-key: una clave de API para tu cuenta de Mailjet.
    • your-mailjet-secret-key: la clave secreta correspondiente a 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. En el directorio mailjet, usa Maven para empaquetar la clase como un archivo JAR:
    user@test-centos:~# mvn clean package
  7. Asegúrate de que estás usando OpenJDK 8:
    user@test-centos:~# sudo alternatives --config java
  8. Para enviar un correo, desde el directorio de destino, ejecuta el archivo JAR con las direcciones de correo del destinatario y del 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

A continuación, se incluye una referencia rápida a los ajustes SMTP específicos de Mailjet que se utilizan para configurar clientes:

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

Siguientes pasos

Consulta arquitecturas de referencia, diagramas y prácticas recomendadas sobre Google Cloud. Consulta nuestro Centro de arquitectura de Cloud.