Como enviar e-mail com SendGrid

Neste tutorial, você aprenderá a usar o SendGrid para enviar e-mails de um aplicativo executado em uma instância do Compute Engine. O SendGrid é um serviço de e-mail de terceiros que oferece aos usuários do Compute Engine uma avaliação gratuita que inclui 12.000 e-mails comerciais por mês.

Objetivos

  • Usar o SendGrid com o Postfix em uma instância do Compute Engine.
  • Usar o SendGrid em código Java executado em uma instância do Compute Engine.
  • Usar o SendGrid em código Node.js executado em uma instância do Compute Engine.

Custos

Neste tutorial, usamos componentes faturáveis do Cloud Platform, incluindo o Google Compute Engine.

Novos usuários do Cloud Platform podem se qualificar para uma avaliação gratuita.

Antes de começar

  1. Faça login na sua Conta do Google.

    Se você ainda não tiver uma, inscreva-se.

  2. Selecione ou crie um projeto do Google Cloud Platform.

    Acessar a página Gerenciar recursos

  3. Verifique se o faturamento foi ativado no projeto do Google Cloud Platform.

    Saiba como ativar o faturamento

  4. No Console do GCP, acesse a página "Instâncias de VM".

    Acessar a página "Instâncias da VM"

  5. Clique em Criar instância.
  6. Defina o Nome como sendgrid-tutorial.
  7. Na seção Disco de inicialização, clique em Alterar para iniciar a configuração do disco de inicialização.
  8. Na guia Imagens do SO, escolha a Debian or CentOS image.

  9. Clique em Selecionar.
  10. Clique em Criar para criar a instância.
  11. Use o Google Cloud Platform Marketplace para se inscrever no serviço de e-mails do SendGrid. Anote as credenciais da conta SMTP do SendGrid, que incluem nome de usuário, senha e nome do host. O nome de usuário e a senha SMTP são iguais aos da inscrição no serviço. O nome do host do SendGrid é smtp.sendgrid.net.
  12. Crie uma chave de API:
    1. Faça login no Sendgrid e acesse Configurações > Chaves de API.
    2. Crie uma chave de API.
    3. Selecione as permissões para a chave. Para enviar e-mails, a chave precisará, no mínimo, de permissões de envio de e-mail.
    4. Clique em Save para criar a chave.
    5. O SendGrid gera uma nova chave. Esta é a única cópia da chave, portanto faça uma cópia dela e salve-a para depois.

Enviar e-mails com o Postfix na instância

Siga estas etapas para se conectar à instância sendgrid-tutorial e executar o SendGrid com o Postfix.

Conectar-se à instância tutorial-sendgrid usando o SSH

  1. No Console do GCP, acesse a página "Instâncias de VM".

    Acessar a página "Instâncias da VM"

  2. Na lista de instâncias de máquinas virtuais, clique em SSH na linha da instância com que você quer se conectar.

Executar o Postfix na instância

Execute os seguintes comandos no terminal SSH:

  1. Torne-se um superusuário:

    sudo su -
    
  2. Defina um comando unmask seguro:

    umask 077
    
  3. Instale o agente de transporte de e-mail do Postfix.

    Debian

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

    CentOS

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

    Se solicitado, selecione a configuração Somente local e aceite o nome de domínio padrão.

  4. Modifique as opções de configuração do Postfix.

    1. Abra /etc/postfix/main.cf para edição. Por exemplo, para usar o editor de texto nano, insira o seguinte comando:

      nano /etc/postfix/main.cf
      
    2. Se as seguintes linhas estiverem no arquivo, deixe-as como comentários:

      default_transport = error
      relay_transport = error
      
      \#default_transport = error
      \#relay_transport = error
      
    3. Adicione o serviço SMTP do SendGrid incluindo a seguinte linha no final do arquivo:

      relayhost = [smtp.sendgrid.net]:2525
      
    4. Além disso, adicione as seguintes linhas no final do arquivo para aplicar o suporte SSL/TLS e configurar a autenticação SMTP para essas solicitações. Na configuração do Postfix, a autenticação é processada por um módulo de camada simples de acesso e segurança (SASL, na sigla em inglês).

      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
    5. Salve e feche o arquivo.

  5. Gere um mapa de senha SASL:

    • É possível gerar o mapa de senha SASL usando o nome de usuário e a senha da conta do SendGrid:

       echo [smtp.sendgrid.net]:2525 [YOUR_SMTP_LOGIN]:[YOUR_SMTP_PASSWORD] >> /etc/postfix/sasl_passwd
      

      em que:

      • [YOUR_SMTP_LOGIN] é o seu nome de usuário do SendGrid;
      • [YOUR_SMTP_PASSWORD] é sua senha do SendGrid.
    • Como alternativa, se você não tiver acesso ao nome de usuário e senha da conta do SendGrid, é possível também gerar o mapa de senha SASL usando uma chave de API produzida a partir dessa conta:

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

      em que [YOUR_API_KEY] é o conteúdo de uma chave de API que você criou na sua conta do SendGrid.

  6. Use o utilitário postmap para gerar um arquivo .db:

    postmap /etc/postfix/sasl_passwd
    
  7. Verifique se você tem um arquivo .db:

    ls -l /etc/postfix/sasl_passwd*
    
    -rw------- 1 root root    ...  /etc/postfix/sasl_passwd
    -rw------- 1 root root    ...  /etc/postfix/sasl_passwd.db
    
  8. Remova o arquivo com as suas credenciais, pois ele não é mais necessário:

    rm /etc/postfix/sasl_passwd
    
  9. Defina as permissões no arquivo .db e verifique se o outro arquivo foi removido:

    chmod 600 /etc/postfix/sasl_passwd.db
    ls -la /etc/postfix/sasl_passwd.db
    
    -rw------- 1 root root    ...  /etc/postfix/sasl_passwd.db
    
  10. Recarregue sua configuração com os parâmetros modificados:

    Debian

    /etc/init.d/postfix restart
    

    CentOS

    postfix reload
    

  11. Instale o pacote mailutils ou mailx:

    Debian

    apt-get install mailutils -y

    CentOS

    yum install mailx -y
    

  12. Envie um e-mail de teste:

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

    em que:

    • [MESSAGE] é o corpo do e-mail.
    • [SUBJECT] é o assunto do e-mail.
    • [EMAIL@EXAMPLE.COM] é o endereço de e-mail para onde você quer enviar uma mensagem.

    Nos registros do sistema, procure uma linha de status que contenha status e o código de resposta bem-sucedida do servidor (250):

    Debian

    tail -n 5 /var/log/syslog
    

    CentOS

    tail -n 5 /var/log/maillog
    

Enviar e-mails com Java na instância

Conectar-se com a instância tutorial-sendgrid usando o SSH

  1. No Console do GCP, acesse a página "Instâncias de VM".

    Acessar a página "Instâncias da VM"

  2. Na lista de instâncias de máquinas virtuais, clique em SSH na linha da instância com que você quer se conectar.

Criar e enviar uma mensagem de e-mail

Nas instruções a seguir, a biblioteca de cliente Java do SendGrid é usada para criar e enviar uma mensagem de e-mail pelo SendGrid. Veja o exemplo completo no GitHub.

No terminal do SSH:

  1. Conecte-se como um superusuário e configure um umask seguro:

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

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

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

    cd /root/java-docs-samples/compute/sendgrid/src/main/java/com/example/compute/sendgrid
    
  5. Abra o arquivo SendEmailServelet.java para editá-lo.

    • Substitua YOUR-SENDGRID-API-KEY pela chave de API da sua conta do SendGrid.

    • Substitua YOUR-SENDGRID-FROM-EMAIL pelo endereço de e-mail que enviará a mensagem.

    • Substitua DESTINATION-EMAIL pelo endereço de e-mail que receberá a mensagem.

  6. Acesse o diretório raiz do código de amostra:

    cd /root/java-docs-samples/compute/sendgrid
    
  7. Crie o pacote da classe Java:

    mvn clean package
    
  8. Acesse o novo diretório target:

    cd target
    
  9. Defina as permissões para executar o arquivo jar:

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

    update-alternatives --config java
    

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

  11. Execute o arquivo Java:

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

Enviar e-mails com o Node.js na instância

Conectar-se com a instância tutorial-sendgrid usando o SSH

  1. No Console do GCP, acesse a página "Instâncias de VM".

    Acessar a página "Instâncias da VM"

  2. Na lista de instâncias de máquinas virtuais, clique em SSH na linha da instância com que você quer se conectar.

Criar e enviar uma mensagem de e-mail

No terminal do SSH:

  1. Conecte-se como um superusuário e configure um umask seguro:

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

    Debian

    apt-get update
    

    CentOS

    yum update -y
    

  3. Instale as dependências do 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. Instale o Node.js. Por padrão, essa instalação também inclui o npm:

    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 -
    

    Depois 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 amostra:

    git clone https://github.com/googleapis/nodejs-compute.git
    
  7. Acesse o diretório que contém a amostra do SendGrid:

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

    cp sendgrid.js sendmail.js
    
  9. Abra o arquivo sendmail.js para editá-lo.

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

    • Substitua from_email@example.com pelo endereço de e-mail que enviará a mensagem.

    • Substitua to_email@example.com pelo endereço de e-mail que receberá a mensagem.

    // 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().catch(console.error);

  10. Execute o programa para enviar uma mensagem de e-mail pelo SendGrid:

    node sendmail.js
    

Como fazer uma limpeza

Para evitar que os recursos usados nesse tutorial sejam cobrados na conta do Google Cloud Platform, é possível fazer o seguinte:

Excluir o projeto

O jeito mais fácil de evitar cobranças é excluindo o projeto que você criou para o tutorial.

Para excluir o projeto:

  1. No Console do GCP, acesse a página "Projetos".

    Acessar a página Projetos

  2. Na lista de projetos, selecione um e clique em Excluir projeto.
  3. Na caixa de diálogo, digite o código do projeto e clique em Encerrar para excluí-lo.

Excluir a instância do Compute Engine

Para excluir uma instância do Compute Engine:

  1. No Console do GCP, acesse a página "Instâncias de VM".

    Acessar a página "Instâncias de VMs"

  2. Clique na caixa de seleção ao lado da instância sendgrid-tutorial.
  3. Clique no botão Excluir na parte superior da página para excluir a instância.

Próximos passos

Teste outros recursos do Google Cloud Platform. Veja nossos tutoriais.

Esta página foi útil? Conte sua opinião sobre:

Enviar comentários sobre…

Documentação do Compute Engine