Enviar emails com o SendGrid


Este tutorial mostra como usar o SendGrid para enviar emails a partir de uma app executada numa instância de máquina virtual (VM) do Compute Engine.

Objetivos

  • Use o SendGrid com o Postfix numa instância do Compute Engine.
  • Use o SendGrid em código Java executado numa instância do Compute Engine.
  • Use o SendGrid em código Node.js executado numa instância do Compute Engine.
  • Use o SendGrid com um servidor de transporte de limite do Microsoft Exchange numa instância do Compute Engine.

Para outras informações sobre a configuração do SendGrid, consulte a documentação para programadores do SendGrid.

Custos

Neste documento, usa os seguintes componentes faturáveis do Google Cloud:

  • Compute Engine

Para gerar uma estimativa de custos com base na sua utilização projetada, use a calculadora de preços.

Os novos Google Cloud utilizadores podem ser elegíveis para uma avaliação gratuita.

Antes de começar

  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.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    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.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    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. No separador Public images, escolha a Debian or CentOS image version.
  10. Clique em Selecionar.
  11. Para criar a VM, clique em Criar.
  12. Use o Google Cloud Marketplace para se inscrever no serviço de email SendGrid. Tome nota das credenciais da conta SMTP do SendGrid, que incluem o nome de utilizador, a palavra-passe e o nome do anfitrião. O nome de utilizador e a palavra-passe do SMTP são os mesmos que usou para se inscrever no serviço. O nome do anfitrião do SendGrid é smtp.sendgrid.net.
  13. Crie uma chave da API:
    1. Inicie sessão no SendGrid e aceda a Settings > API Keys.
    2. Crie uma chave da API.
    3. Selecione as autorizações para a chave. No mínimo, a chave tem de ter autorizações de envio de correio para enviar emails.
    4. Clique em Guardar para criar a chave.
    5. O SendGrid gera uma nova chave. Esta é a única cópia da chave, por isso, certifique-se de que a copia e a guarda para mais tarde.

Enviar correio a partir da sua instância com o Postfix

Conclua os passos seguintes para estabelecer ligação à sua instância do sendgrid-tutorial e executar o SendGrid com o Postfix.

Ligue-se à sua instância sendgrid-tutorial atravé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.

Configurar o SendGrid como uma transmissão SMTP com o Postfix

Execute os seguintes comandos no seu terminal SSH para usar o SendGrid como um retransmissor SMTP com o Postfix.

  1. Torne-se um superutilizador:

    sudo su -
    
  2. Defina uma umask segura:

    umask 077
    
  3. Instale o agente de transporte de correio Postfix:

    Debian

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

    CentOS

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

    Se lhe for pedido, selecione a configuração Apenas local e aceite o nome do domínio predefinido.

  4. Modifique as opções de configuração do Postfix. Abra o perfil /etc/postfix/main.cf para edição. Por exemplo, para usar o editor de texto nano, introduza o seguinte comando:

    nano /etc/postfix/main.cf
    
  5. Atualize o ficheiro:

    1. Comente as seguintes linhas:

      # default_transport = error
      # relay_transport = error
      
    2. Adicione as seguintes linhas ao final do ficheiro:

      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
      

      As linhas acima aplicam o suporte de SSL/TLS e configuram a autenticação SMTP para estes pedidos. Um módulo de camada de segurança e acesso simples (SASL) processa a autenticação na configuração do Postfix.

  6. Guarde e feche o ficheiro.

  7. Gere o mapa de palavras-passe SASL com a chave da API que gerou na secção Antes de começar. Substitua your-api-key pela chave da API que gerou.

    echo [smtp.sendgrid.net]:2525 apikey:your-api-key >> /etc/postfix/sasl_passwd
  8. Use o utilitário postmap para gerar um ficheiro .db:

    postmap /etc/postfix/sasl_passwd
    
  9. Verifique se tem um ficheiro .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. Remova o ficheiro que contém as suas credenciais, uma vez que já não é necessário:

    rm /etc/postfix/sasl_passwd
    
  11. Defina as autorizações no ficheiro .db e verifique se o outro ficheiro foi removido:

    chmod 600 /etc/postfix/sasl_passwd.db
    ls -la /etc/postfix/sasl_passwd*
    
    -rw------- 1 root root    ...  /etc/postfix/sasl_passwd.db
    
  12. Atualize a configuração para carregar os parâmetros modificados:

    Debian

    /etc/init.d/postfix restart
    

    CentOS

    postfix reload
    

  13. Instale o pacote mailutils ou mailx:

    Debian

    apt -y install mailutils

    CentOS

    yum install mailx -y
    

  14. Envie um email de teste:

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

    Substitua o seguinte:

    • message: o corpo do email.
    • subject: o assunto do email.
    • email@example.com: o endereço de email para o qual quer enviar uma mensagem.

    Procure nos registos do sistema uma linha de estado que contenha status e o código de resposta do servidor (250):

    Debian

    tail -n 5 /var/log/syslog
    

    CentOS

    tail -n 5 /var/log/maillog
    

Enviar correio com Java na sua instância

Ligue-se à sua instância sendgrid-tutorial atravé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.

Construa e envie uma mensagem de email

As instruções seguintes usam a biblioteca cliente Java do SendGrid para criar e enviar uma mensagem de email através do SendGrid. Pode ver o exemplo completo no GitHub.

No terminal SSH:

  1. Torne-se superutilizador e defina uma umask segura:

    sudo su -
    umask 077
    
  2. Instale o Java e o Maven:

    apt -y update && apt -y install git-core openjdk-11-jdk maven
    
  3. Clone o repositório do GitHub:

    git clone https://github.com/GoogleCloudPlatform/java-docs-samples.git
    
  4. Aceda ao código-fonte principal do exemplo:

    cd /root/java-docs-samples/compute/sendgrid/src/main/java/com/example/compute/sendgrid
    
  5. Abra SendEmailServelet.java para edição.

    • Substitua your-sendgrid-api-key pela chave API da sua conta do SendGrid.

    • Substitua your-sendgrid-from-email pelo endereço de email a partir do qual quer enviar correio.

    • Substitua destination-email pelo endereço de email para o qual quer enviar correio.

  6. Aceda ao diretório raiz do exemplo de código:

    cd /root/java-docs-samples/compute/sendgrid
    
  7. Empacote a classe Java:

    mvn clean package
    
  8. Aceda ao novo diretório target:

    cd target
    
  9. Defina autorizações que lhe permitam executar o ficheiro JAR:

    chmod +x compute-sendgrid-1.0-SNAPSHOT-jar-with-dependencies.jar
    
  10. Execute o seletor de versão Java alternativo:

    update-alternatives --config java
    

    Selecione a opção java-11-openjdk-amd64.

  11. Execute o ficheiro Java:

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

Enviar correio com o Node.js na sua instância

Para executar este exemplo, tem de ter a versão 7.6 ou posterior do Node.js instalada na instância de VM.

Ligue-se à sua instância sendgrid-tutorial atravé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.

Construa e envie uma mensagem de email

No terminal SSH:

  1. Torne-se superutilizador e defina uma umask segura:

    sudo su -
    umask 077
    
  2. Atualize os repositórios de pacotes:

    Debian

    apt update
    

    CentOS

    yum update -y
    

  3. Instale as dependências do 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. Instale o Node.js. Por predefinição, a instalação também instala o 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 -
    

    Em seguida, instale o Node.js:

    yum -y install nodejs
    

  5. Instale o cliente Node.js do SendGrid:

    npm install sendgrid
    
  6. Clone o repositório de exemplo:

    git clone https://github.com/GoogleCloudPlatform/nodejs-docs-samples.git
    
  7. Aceda ao diretório que contém o exemplo do SendGrid:

    cd nodejs-docs-samples/compute
    
  8. Copie o ficheiro sendgrid.js:

    cp sendgrid.js sendmail.js
    
  9. Abra sendmail.js para edição.

    • Substitua your-sendgrid-api-key pela chave API da sua conta do SendGrid.

    • Substitua from-email@example.com pelo endereço de email a partir do qual quer enviar correio.

    • Substitua to-email@example.com pelo endereço de email para o qual quer enviar correio.

    // 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. Execute o programa para enviar uma mensagem de email através do SendGrid:

    node sendmail.js
    

Enviar correio a partir de um servidor de transporte de extremidade do Exchange

Pode configurar o Microsoft Exchange para enviar emails de saída com o SendGrid configurando um conector de envio de saída. Para obter detalhes, consulte o artigo Implementar o Microsoft Exchange Server 2016 no Compute Engine.

Limpar

Para evitar incorrer em custos na sua conta do Google Cloud pelos recursos usados neste tutorial, elimine o projeto que contém os recursos ou mantenha o projeto e elimine os recursos individuais.

Elimine o projeto

A forma mais fácil de eliminar a faturação é eliminar o projeto que criou para o tutorial.

Para eliminar o projeto:

  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.

Elimine a sua instância do Compute Engine

Para eliminar uma instância do Compute Engine:

  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.

O que se segue?

Explore arquiteturas de referência, diagramas e práticas recomendadas sobre o Google Cloud. Consulte o nosso Centro de arquitetura na nuvem.