Envía correo electrónico 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 máquina virtual (VM) de Compute Engine.

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
  • Usar SendGrid con un servidor de transporte perimetral de Microsoft Exchange en una instancia de Compute Engine

Si quieres obtener más información sobre la configuración de SendGrid, consulta la documentación para desarrolladores de SendGrid.

Costos

En este documento, usarás los siguientes componentes facturables de Google Cloud:

  • Compute Engine

Para generar una estimación de costos en función del uso previsto, usa la calculadora de precios.

Es posible que los usuarios de Google Cloud nuevos cumplan con los requisitos para acceder a una prueba gratuita.

Antes de comenzar

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  5. Verify that billing is enabled for your Google Cloud project.

  6. In the Google Cloud console, go to the Create an instance page.

    Go to Create an instance

  7. Set Name to sendgrid-tutorial.
  8. In the Boot disk section, click Change to begin configuring your boot disk.
  9. En la pestaña Public images, selecciona a Debian or CentOS image version.
  10. Haz clic en Seleccionar.
  11. Para crear la VM, haz clic en Crear.
  12. Usa Google Cloud Marketplace para registrarte en el 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.
  13. Crea una clave de API de la manera siguiente:
    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. La clave debe tener como mínimo permisos de envío de correo electrónico 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 desde tu instancia con Postfix

Completa los siguientes pasos para conectarte a tu instancia de sendgrid-tutorial y ejecutar SendGrid con Postfix.

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

  1. In the Google Cloud console, go to the VM instances page.

    Go to VM instances

  2. In the list of virtual machine instances, click SSH in the row of the instance that you want to connect to.

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 update && apt -y install postfix libsasl2-modules

    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 edición. Por ejemplo, para usar el editor de texto nano, ingresa el comando siguiente:

    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 mediante la clave de API que generaste en la sección Antes de comenzar. Reemplaza your-api-key por la clave de API que generaste.

    echo [smtp.sendgrid.net]:2525 apikey:your-api-key >> /etc/postfix/sasl_passwd
  8. Usa la utilidad postmap para generar un archivo .db:

    postmap /etc/postfix/sasl_passwd
    
  9. Verifica que tengas un archivo .db de la manera siguiente:

    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 con el comando siguiente:

    rm /etc/postfix/sasl_passwd
    
  11. Configura los permisos en tu archivo .db y verifica que el otro archivo se haya quitado de la manera siguiente:

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

    Debian

    /etc/init.d/postfix restart
    

    CentOS

    postfix reload
    

  13. Instala el paquete mailutils o mailx con los comandos siguientes:

    Debian

    apt -y install mailutils

    CentOS

    yum install mailx -y
    

  14. Envía un correo electrónico de prueba mediante el siguiente comando:

    echo 'message' | mail -s subject email@example.com

    Reemplaza lo siguiente:

    • message: El cuerpo del correo electrónico
    • subject: El asunto del correo electrónico
    • email@example.com: La dirección de correo electrónico a la que deseas enviar un mensaje

    Busca en tus registros de sistema una línea de estado que contenga status y el código de respuesta correcto del servidor (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. In the Google Cloud console, go to the VM instances page.

    Go to VM instances

  2. In the list of virtual machine instances, click SSH in the row of the instance that you want to connect to.

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 -y update && apt -y install git-core openjdk-11-jdk maven
    
  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 edición.

    • Reemplaza your-sendgrid-api-key por la clave de API para tu cuenta de SendGrid.

    • Reemplaza your-sendgrid-from-email por la dirección de correo electrónico desde la que deseas enviar un correo electrónico.

    • Reemplaza destination-email por la dirección de correo electrónico a la que deseas enviar un 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 target nuevo con el comando siguiente:

    cd target
    
  9. Establece permisos que te permitan 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 con el siguiente comando:

    update-alternatives --config java
    

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

  11. Ejecuta el archivo Java con el comando siguiente:

    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 7.6 o posterior de Node.js instalada en la instancia de VM.

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

  1. In the Google Cloud console, go to the VM instances page.

    Go to VM instances

  2. In the list of virtual machine instances, click SSH in the row of the instance that you want to connect to.

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 update
    

    CentOS

    yum update -y
    

  3. Instala las dependencias de Node.js:

    Debian

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

    CentOS

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

  4. Instala Node.js. De forma predeterminada, la instalación también instala npm:

    Debian

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

    CentOS

    curl --silent --location https://rpm.nodesource.com/setup_14.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/GoogleCloudPlatform/nodejs-docs-samples.git
    
  7. Ve al directorio que contiene la muestra de SendGrid con el comando siguiente:

    cd nodejs-docs-samples/compute
    
  8. Copia el archivo sendgrid.js con el comando siguiente:

    cp sendgrid.js sendmail.js
    
  9. Abre sendmail.js para edición.

    • Reemplaza your-sendgrid-api-key por la clave de API para tu cuenta de SendGrid.

    • Reemplaza from-email@example.com por la dirección de correo electrónico desde la que deseas enviar un correo electrónico.

    • Reemplaza to-email@example.com por la dirección de correo electrónico a la que deseas enviar un 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
    

Envía correos electrónicos desde un servidor de transporte perimetral de Exchange

Puedes configurar Microsoft Exchange para enviar correos electrónicos salientes con SendGrid mediante la configuración de un conector de envío saliente. Para obtener más detalles, consulta Implementa Microsoft Exchange Server 2016 en Compute Engine.

Limpia

Para evitar que se apliquen cargos a tu cuenta de Google Cloud por los recursos usados en este instructivo, borra el proyecto que contiene los recursos o conserva el proyecto y borra los recursos individuales.

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, sigue estos pasos:

  1. In the Google Cloud console, go to the Manage resources page.

    Go to Manage resources

  2. In the project list, select the project that you want to delete, and then click Delete.
  3. In the dialog, type the project ID, and then click Shut down to delete the project.

Borra tu instancia de Compute Engine

Para borrar una instancia de Compute Engine, haz lo siguiente:

  1. In the Google Cloud console, go to the VM instances page.

    Go to VM instances

  2. Select the checkbox for your sendgrid-tutorial instance.
  3. To delete the instance, click More actions, click Delete, and then follow the instructions.

¿Qué sigue?

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