Envía 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 6,000 correos electrónicos cada mes. Además, Mailjet ofrece las siguientes características:

  • Una API, interfaz de usuario y retransmisión de SMTP para enviar correos electrónicos transaccionales y de marketing
  • Cumplimiento con las normas europeas de protección de datos
  • Características 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 de API en Go, PHP, Nodejs, Java, Python y Ruby para administrar cuentas secundarias, autenticaciones, 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 de enviar correos electrónicos de dominios que no sean gmail.com.

En este documento, se describe cómo configurar una 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 Mailgun validó la dirección de correo electrónico desde la que deseas enviar los correos electrónicos.

  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 retransmisión de correo te permite reenviar correos electrónicos a Mailjet para la entrega remota.

Con Postfix

  1. Conéctate a tu instancia con SSH:

    gcloud compute ssh [INSTANCE_NAME]
    

    en el que [INSTANCE_NAME] es el nombre de la instancia desde la que deseas enviar correos electrónicos.

  2. En la instancia de 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-get update && sudo apt-get install postfix libsasl2-modules -y
    

    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.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.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-get install mailutils -y
    

    CentOS


    sudo yum install mailx -y
    

    Envía un mensaje de prueba, como se indica a continuación:

    echo 'Test passed.' | mail -s 'Test-Email' -aFrom:[FROM_EMAIL] [DESTINATION_EMAIL]
    

    En el ejemplo anterior, se ilustra lo siguiente:

    • [FROM_EMAIL]: una dirección de correo electrónico que fue validada con Mailgun
    • [DESTINATION_EMAIL]: la dirección a la que deseas enviar el correo electrónico

    Busca en los registros de los sistemas una línea de estado que contenga status y el código de respuesta correcta del servidor (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 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-get update
  3. Instala las dependencias de Node.js:
    user@test-wheezy:~# sudo apt-get install git-core curl build-essential openssl libssl-dev -y
  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-get update && sudo apt-get 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 la configuración de Mailjet y reemplaza las siguientes variables:

    • YOUR-MAILJET-API-KEY con una clave de API para tu cuenta de Mailjet
    • YOUR-MAILJET-SECRET-KEY con la clave secreta correspondiente para tu cuenta de Mailjet

    public class MailjetSender {
    
      public static void main(String[] args) throws MailjetException, MailjetSocketTimeoutException {
        final String mailjetApiKey = "YOUR-MAILJET-API-KEY";
        final String mailjetSecretKey = "YOUR-MAILJET-SECRET-KEY";
        MailjetClient client = new MailjetClient(
            mailjetApiKey, mailjetSecretKey, new ClientOptions("v3.1"));
    
        MailjetSender sender = new MailjetSender();
        sender.sendMailjet(args[0], args[1], client);
      }
    
      public MailjetResponse sendMailjet(String recipient, String sender, MailjetClient client)
            throws MailjetException, MailjetSocketTimeoutException {
        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 la configuración de Mailjet y reemplaza las siguientes variables:

    • YOUR-MAILJET-API-KEY con una clave de API para tu cuenta de Mailjet
    • YOUR-MAILJET-SECRET-KEY con la clave secreta correspondiente para tu cuenta de Mailjet

    public class MailjetSender {
    
      public static void main(String[] args) throws MailjetException, MailjetSocketTimeoutException {
        final String mailjetApiKey = "YOUR-MAILJET-API-KEY";
        final String mailjetSecretKey = "YOUR-MAILJET-SECRET-KEY";
        MailjetClient client = new MailjetClient(
            mailjetApiKey, mailjetSecretKey, new ClientOptions("v3.1"));
    
        MailjetSender sender = new MailjetSender();
        sender.sendMailjet(args[0], args[1], client);
      }
    
      public MailjetResponse sendMailjet(String recipient, String sender, MailjetClient client)
            throws MailjetException, MailjetSocketTimeoutException {
        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 de SMTP específica de Mailjet que se usa para configurar los clientes:

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

Revisa nuestros instructivos y prueba otras funciones de Google Cloud.

¿Te ha resultado útil esta página? Enviar comentarios:

Enviar comentarios sobre...

Documentación de Compute Engine