Enviar correos electrónicos con SendGrid

En este tutorial se muestra cómo usar SendGrid para enviar correos desde una aplicación que se ejecuta en una instancia de máquina virtual de Compute Engine.

Enviar correo desde tu instancia con Postfix

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

Conéctate a tu instancia sendgrid-tutorial mediante SSH

  1. In the Cloud de Confiance 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.

Configurar SendGrid como relay SMTP con Postfix

Ejecuta los siguientes comandos en tu terminal SSH para usar SendGrid como relay SMTP con Postfix.

  1. Conviértete en superusuario:

    sudo su -
    
  2. Define una umask segura:

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

    Debian

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

    CentOS

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

    Si se te pide, 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, introduce el siguiente comando:

    nano /etc/postfix/main.cf
    
  5. 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 = [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 obligan a usar 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.

  6. Guarda y cierra el archivo.

  7. Genera el mapa de contraseñas SASL con la clave de API que has generado en la sección Antes de empezar. Sustituye your-api-key por la clave de API que has generado.

    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 tienes 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. Elimina el archivo que contiene tus credenciales, ya que no es necesario:

    rm /etc/postfix/sasl_passwd
    
  11. Define los permisos de tu archivo .db y comprueba que el otro archivo se ha eliminado:

    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:

    Debian

    /etc/init.d/postfix restart
    

    CentOS

    postfix reload
    

  13. Instala el paquete mailutils o mailx:

    Debian

    apt -y install mailutils

    CentOS

    yum install mailx -y
    

  14. Envía un correo de prueba:

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

    Haz los cambios siguientes:

    • message: el cuerpo del correo.
    • subject: el asunto del correo.
    • email@example.com: la dirección de correo a la que quieres 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 (250):

    Debian

    tail -n 5 /var/log/syslog
    

    CentOS

    tail -n 5 /var/log/maillog
    

Enviar correos con Java en tu instancia

Conéctate a tu instancia sendgrid-tutorial mediante SSH

  1. In the Cloud de Confiance 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.

Redactar y enviar un mensaje de correo

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

En tu terminal SSH:

  1. Conviértete en superusuario y define una umask segura:

    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 código fuente principal del ejemplo:

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

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

    • Sustituye your-sendgrid-from-email por la dirección de correo desde la que quieras enviar mensajes.

    • Sustituye destination-email por la dirección de correo a la que quieras enviar el correo.

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

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

    mvn clean package
    
  8. Ve al nuevo directorio target:

    cd target
    
  9. Define los permisos que te permitan ejecutar el archivo JAR:

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

    update-alternatives --config java
    

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

  11. Ejecuta el archivo Java:

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

Enviar correos con Node.js en tu instancia

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

Conéctate a tu instancia sendgrid-tutorial mediante SSH

  1. In the Cloud de Confiance 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.

Redactar y enviar un mensaje de correo

En tu terminal SSH:

  1. Conviértete en superusuario y define una umask segura:

    sudo su -
    umask 077
    
  2. Actualiza los repositorios de 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 -
    

    A continuación, 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 el ejemplo de SendGrid:

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

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

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

    • Sustituye from-email@example.com por la dirección de correo desde la que quieras enviar mensajes.

    • Sustituye to-email@example.com por la dirección de correo a la que quieras enviar el correo.

    // 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 a través de SendGrid:

    node sendmail.js
    

Enviar correo desde un servidor de transporte perimetral de Exchange

Puedes configurar Microsoft Exchange para enviar correos salientes con SendGrid configurando un conector de envío saliente. Para obtener más información, consulta el artículo Deploying Microsoft Exchange Server 2016 on Compute Engine (Desplegar Microsoft Exchange Server 2016 en Compute Engine).