Envía correos electrónicos con SendGrid

En este instructivo, se muestra cómo usar SendGrid para enviar correos electrónicos desde una aplicación que se ejecuta en una instancia de Compute Engine. SendGrid es un servicio de correo electrónico de terceros que ofrece a los usuarios de Compute Engine una prueba gratuita con 12,000 correos electrónicos transaccionales gratis cada mes.

Objetivos

  • Usar SendGrid con Postfix en una instancia de Compute Engine
  • Usar SendGrid en código Java que se ejecuta en una instancia de Compute Engine
  • Usar SendGrid en código Node.js que se ejecuta en una instancia de Compute Engine

Costos

En este instructivo, se usan componentes facturables de Cloud Platform, incluido Google Compute Engine.

Los usuarios nuevos de Cloud Platform pueden ser aptos para una prueba gratuita.

Antes de comenzar

  1. Accede a tu Cuenta de Google.

    Si todavía no tienes una cuenta, regístrate para obtener una nueva.

  2. Selecciona o crea un proyecto de GCP.

    Ir a la página Administrar recursos

  3. Comprueba que la facturación esté habilitada en tu proyecto.

    Descubre cómo puedes habilitar la facturación

  4. En GCP Console, ve a la página VM Instances.

    Ir a la página Instancias de VM

  5. Haz clic en Crear instancia.
  6. Configura el Nombre como sendgrid-tutorial.
  7. En la sección Disco de arranque, haz clic en Cambiar para comenzar a configurar el disco de arranque.
  8. En la pestaña Imágenes del SO, selecciona a Debian or CentOS image.

  9. Haz clic en Seleccionar.
  10. Haz clic en Crear para crear la instancia.
  11. Usa el GCP Marketplace para registrarte al servicio de correo electrónico de SendGrid. Toma nota de las credenciales de tu cuenta SMTP de SendGrid, que incluyen el nombre de usuario, contraseña y nombre de host. Tu nombre de usuario y contraseña de SMTP son los mismos que usaste para registrarte en el servicio. El nombre de host de SendGrid es smtp.sendgrid.net.
  12. Crea una clave de API:
    1. Accede a Sendgrid y ve a Configuración > Claves de API.
    2. Crea una clave de API.
    3. Selecciona los permisos de la clave. Como mínimo, la clave requerirá permisos para enviar correos electrónicos.
    4. Haz clic en Guardar para crear la clave.
    5. SendGrid genera una clave nueva. Esta es la única copia de la clave, así que asegúrate de copiarla y guardarla para más adelante.

Envía correos electrónicos con Postfix en tu instancia

Sigue estos pasos para conectarte a la instancia de sendgrid-tutorial y ejecutar SendGrid con Postfix.

Conéctate a la instancia de sendgrid-tutorial a través de SSH

  1. En la Consola de APIs, ve a la página Instancias de VM.

    Ir a la página Instancias de VM

  2. En la lista de instancias de máquinas virtuales, haz clic en el botón SSH de la fila de la instancia a la que quieres conectarte.

Configura SendGrid como una retransmisión de SMTP con Postfix

Ejecuta los siguientes comandos en la terminal de SSH para usar SendGrid como retransmisión de SMTP con Postfix.

  1. Conviértete en superusuario:

    sudo su -
    
  2. Establece una máscara de seguridad:

    umask 077
    
  3. Instala el agente de transporte de correos Postfix:

    Debian

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

    CentOS

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

    Si se te solicita, selecciona la configuración Solo local y acepta el nombre de dominio predeterminado.

  4. Modifica las opciones de configuración de Postfix. Abre /etc/postfix/main.cf para editarlo. Por ejemplo, para usar el editor de texto nano, ingresa el siguiente comando:

    nano /etc/postfix/main.cf
    
  5. 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 = [smtp.sendgrid.net]:2525
      smtp_tls_security_level = encrypt
      smtp_sasl_auth_enable = yes
      smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
      header_size_limit = 4096000
      smtp_sasl_security_options = noanonymous
      

      Las líneas anteriores aplican la compatibilidad con SSL/TLS y configuran 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.

  6. Guarda y cierra el archivo.

  7. Genera el mapa de contraseña SASL con la clave de API generada en la sección Antes de comenzar:

    echo [smtp.sendgrid.net]:2525 apikey:[YOUR_API_KEY] >> /etc/postfix/sasl_passwd
    

    donde [YOUR_API_KEY] es la clave de API que generaste.

  8. Usa la utilidad postmap para generar un archivo .db:

    postmap /etc/postfix/sasl_passwd
    
  9. Verifica que tengas un archivo .db:

    ls -l /etc/postfix/sasl_passwd*
    
    -rw------- 1 root root    ...  /etc/postfix/sasl_passwd
    -rw------- 1 root root    ...  /etc/postfix/sasl_passwd.db
    
  10. Quita el archivo que contiene tus credenciales, ya que no lo necesitarás:

    rm /etc/postfix/sasl_passwd
    
  11. Establece los permisos en el archivo .db y verifica que el otro archivo se haya quitado:

    chmod 600 /etc/postfix/sasl_passwd.db
    ls -la /etc/postfix/sasl_passwd.db
    
    -rw------- 1 root root    ...  /etc/postfix/sasl_passwd.db
    
  12. Vuelve a cargar la configuración para cargar los parámetros modificados:

    Debian

    /etc/init.d/postfix restart
    

    CentOS

    postfix reload
    

  13. Instala el paquete mailutils o mailx:

    Debian

    apt-get install mailutils -y

    CentOS

    yum install mailx -y
    

  14. Envía un correo electrónico de prueba:

    echo '[MESSAGE]' | mail -s [SUBJECT] [EMAIL@EXAMPLE.COM]

    donde:

    • [MESSAGE] es el cuerpo del correo electrónico.
    • [SUBJECT] es el asunto del correo electrónico.
    • [EMAIL@EXAMPLE.COM] es la dirección de correo electrónico a la que deseas enviar un mensaje.

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

    Debian

    tail -n 5 /var/log/syslog
    

    CentOS

    tail -n 5 /var/log/maillog
    

Envía un correo electrónico con Java en tu instancia

Conéctate a la instancia de sendgrid-tutorial a través de SSH

  1. En la Consola de APIs, ve a la página Instancias de VM.

    Ir a la página Instancias de VM

  2. En la lista de instancias de máquinas virtuales, haz clic en el botón SSH de la fila de la instancia a la que quieres conectarte.

Crea y envía un mensaje de correo electrónico

En las siguientes instrucciones, se usa la biblioteca cliente de Java de SendGrid para crear y enviar un mensaje de correo electrónico a través de SendGrid. Puedes ver el ejemplo completo en GitHub.

En tu terminal de SSH, realiza los siguientes pasos:

  1. Conviértete en superusuario y establece una máscara de seguridad:

    sudo su -
    umask 077
    
  2. Instala Java y Maven:

    apt-get update -y && apt-get install git-core openjdk-8-jdk maven -y
    
  3. Clona el repositorio de GitHub:

    git clone https://github.com/GoogleCloudPlatform/java-docs-samples.git
    
  4. Ve al ejemplo en el código fuente principal:

    cd /root/java-docs-samples/compute/sendgrid/src/main/java/com/example/compute/sendgrid
    
  5. Abre SendEmailServelet.java para editarlo.

    • Reemplaza YOUR-SENDGRID-API-KEY con la clave de API de tu cuenta de SendGrid.

    • Reemplaza YOUR-SENDGRID-FROM-EMAIL con la dirección de correo electrónico desde la que deseas enviar el correo electrónico.

    • Reemplaza DESTINATION-EMAIL con la dirección de correo electrónico a la que deseas enviar el correo electrónico.

  6. Ve al directorio raíz del código de muestra:

    cd /root/java-docs-samples/compute/sendgrid
    
  7. Empaqueta la clase Java:

    mvn clean package
    
  8. Ve al directorio nuevo de target:

    cd target
    
  9. Establece los permisos para poder ejecutar el archivo jar:

    chmod +x compute-sendgrid-1.0-SNAPSHOT-jar-with-dependencies.jar
    
  10. Ejecuta el selector de versión alternativa de Java:

    update-alternatives --config java
    

    Selecciona la opción java-8-openjdk-amd64.

  11. Ejecuta el archivo Java:

    java -jar compute-sendgrid-1.0-SNAPSHOT-jar-with-dependencies.jar
    

Envía correos electrónicos con Node.js en tu instancia

Para ejecutar este ejemplo, debes tener la versión de Node.js 7.6 o posterior instalada en la instancia de VM.

Conéctate a la instancia de sendgrid-tutorial a través de SSH

  1. En la Consola de APIs, ve a la página Instancias de VM.

    Ir a la página Instancias de VM

  2. En la lista de instancias de máquinas virtuales, haz clic en el botón SSH de la fila de la instancia a la que quieres conectarte.

Crea y envía un mensaje de correo electrónico

En tu terminal de SSH, realiza los siguientes pasos:

  1. Conviértete en superusuario y establece una máscara de seguridad:

    sudo su -
    umask 077
    
  2. Actualiza los repositorios de tus paquetes:

    Debian

    apt-get update
    

    CentOS

    yum update -y
    

  3. Instala las dependencias de Node.js:

    Debian

    apt-get install git-core curl build-essential openssl libssl-dev -y
    

    CentOS

    yum install git-core curl openssl openssl-devel -y
    yum groupinstall "Development Tools" -y
    

  4. Instala Node.js. También se instalará npm de forma predeterminada:

    Debian

    curl -sL https://deb.nodesource.com/setup_6.x | sudo -E bash -
    sudo apt-get install -y nodejs
    

    CentOS

    curl --silent --location https://rpm.nodesource.com/setup_6.x | bash -
    

    Luego, instala Node.js:

    yum -y install nodejs
    

  5. Instala el cliente Node.js de SendGrid:

    npm install sendgrid
    
  6. Clona el repositorio de muestra:

    git clone https://github.com/googleapis/nodejs-compute.git
    
  7. Ve al directorio que contiene la muestra de SendGrid:

    cd nodejs-compute/samples
    
  8. Copia el archivo sendgrid.js:

    cp sendgrid.js sendmail.js
    
  9. Abre sendmail.js para editarlo.

    • Reemplaza <your-sendgrid-api-key> con la clave de API de tu cuenta de SendGrid.

    • Reemplaza from_email@example.com con la dirección de correo electrónico desde la que deseas enviar el correo electrónico.

    • Reemplaza to_email@example.com con la dirección de correo electrónico a la que deseas enviar el correo electrónico.

    // This sample is based off of:
    // https://github.com/sendgrid/sendgrid-nodejs/tree/master/packages/mail
    const sendgrid = require('@sendgrid/mail');
    sendgrid.setApiKey(process.env.SENDGRID_API_KEY || '<your-sendgrid-api-key>');
    
    async function sendgridExample() {
      await sendgrid.send({
        to: 'to_email@example.com',
        from: 'from_email@example.com',
        subject: 'Sendgrid test email from Node.js on Google Cloud Platform',
        text:
          'Well hello! This is a Sendgrid test email from Node.js on Google Cloud Platform.',
      });
    }
    sendgridExample();

  10. Ejecuta el programa para enviar un mensaje de correo electrónico a través de SendGrid:

    node sendmail.js
    

Limpia

Sigue estos pasos para evitar que se apliquen cargos a tu cuenta de Google Cloud Platform por los recursos que usaste en este instructivo:

Borra el proyecto

La manera más fácil de eliminar la facturación es borrar el proyecto que creaste para el instructivo.

Para borrar el proyecto, haz lo siguiente:

  1. En la GCP Console, dirígete a la página Proyectos.

    Ir a la página Proyectos

  2. En la lista de proyectos, selecciona el proyecto que deseas borrar y haz clic en Borrar.
  3. En el cuadro de diálogo, escribe el ID del proyecto y, luego, haz clic en Cerrar para borrar el proyecto.

Borra tu instancia de Compute Engine

Para borrar una instancia de Compute Engine:

  1. En GCP Console, dirígete a la página Instancias de VM.

    Ir a la página Instancias de VM

  2. Haz clic en la casilla de verificación junto atusendgrid-tutorialinstancia.
  3. Haz clic en el botón Borrar en la parte superior de la página para borrar la instancia.

Qué sigue

Prueba otras funciones de Google Cloud Platform. Revisa nuestros instructivos.

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

Enviar comentarios sobre...

Documentación de Compute Engine