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 estar qualificados 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 uma imagem do Debian ou do CentOS.

  9. Clique em Selecionar.
  10. Clique em Criar para criar a instância.
  11. Use o GCP Marketplace para se inscrever no serviço de e-mail 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.

Como configurar o SendGrid como um redirecionamento SMTP com o Postfix

Execute os comandos a seguir no terminal SSH para usar o SendGrid como um redirecionamento SMTP com o Postfix.

  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. Abra /etc/postfix/main.cf para edição. Por exemplo, para usar o editor de texto nano, insira este comando:

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

    1. Marque as seguintes linhas como comentários:

      # default_transport = error
      # relay_transport = error
      
    2. Adicione estas linhas ao final do arquivo:

      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 SSL/TLS e configuram 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 autenticação e segurança (SASL, na sigla em inglês).

  6. Salve e feche o arquivo.

  7. Gere o mapa de senhas SASL usando a chave de API gerada na seção Antes de começar:

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

    em que [YOUR_API_KEY] é a chave de API que você gerou.

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

    postmap /etc/postfix/sasl_passwd
    
  9. 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
    
  10. Remova o arquivo com as suas credenciais, pois ele não é mais necessário:

    rm /etc/postfix/sasl_passwd
    
  11. 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
    
  12. Recarregue sua configuração com os parâmetros modificados:

    Debian

    /etc/init.d/postfix restart
    

    CentOS

    postfix reload
    

  13. Instale o pacote mailutils ou mailx:

    Debian

    apt-get install mailutils -y

    CentOS

    yum install mailx -y
    

  14. 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
    

Como enviar e-mail com Node.js na instância

Para executar esta amostra, você precisa ter o Node.js versão 7.6 ou mais recente instalado na instância de VM.

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.

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();

  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 neste tutorial sejam cobrados na conta do Google Cloud Platform, faça 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 os tutoriais.

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

Enviar comentários sobre…

Documentação do Compute Engine