Enviando e-mail com SendGrid


Este tutorial mostra como usar o SendGrid para enviar e-mails de um aplicativo em execução em uma instância de máquina virtual (VM) do Compute Engine.

Objetivos

  • Use SendGrid com Postfix em uma instância do Compute Engine.
  • Use SendGrid no código Java em execução em uma instância do Compute Engine.
  • Use o SendGrid no código Node.js em execução em uma instância do Compute Engine.
  • Use o SendGrid com um servidor de transporte de borda do Microsoft Exchange em uma instância do Compute Engine.

Para obter outras informações sobre como configurar o SendGrid, consulte a documentação do desenvolvedor do SendGrid .

Custos

Neste documento, você usará os seguintes componentes faturáveis do Google Cloud:

  • Compute Engine

Para gerar uma estimativa de custo baseada na projeção de uso deste tutorial, use a calculadora de preços. Novos usuários do Google Cloud podem estar qualificados 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.

    Go to project selector

  3. Make sure 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. Make sure 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. Na guia 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 e-mail SendGrid. Anote as credenciais da sua conta SMTP do SendGrid, que incluem nome de usuário, senha e nome do host. Seu nome de usuário e senha SMTP são os mesmos que você usou para se inscrever no serviço. O nome do host SendGrid é smtp.sendgrid.net .
  13. Crie uma chave de API:
    1. Faça login no SendGrid e vá para Configurações > Chaves de API .
    2. Crie uma chave de API.
    3. Selecione as permissões para a chave. No mínimo, a chave deve ter permissões de envio de email para enviar email.
    4. Clique em Salvar para criar a chave.
    5. SendGrid gera uma nova chave. Esta é a única cópia da chave, portanto, copie a chave e salve-a para mais tarde.

Enviando e-mails da sua instância com Postfix

Conclua as etapas a seguir para conectar-se à sua instância do tutorial sendgrid e executar SendGrid com Postfix .

Conecte-se à sua instância do tutorial sendgrid usando 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.

Configurando SendGrid como uma retransmissão SMTP com Postfix

Execute os seguintes comandos em seu terminal SSH para usar SendGrid como uma retransmissão SMTP com Postfix.

  1. Torne-se um superusuário:

    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 solicitado, selecione a configuração Local Only 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 , digite o seguinte comando:

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

    1. Comente as seguintes linhas:

      # default_transport = error
      # relay_transport = error
      
    2. Adicione as seguintes 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 reforçam o suporte SSL/TLS e configuram a autenticação SMTP para essas solicitações. Um módulo de camada simples de acesso e segurança (SASL) lida com a autenticação na configuração do Postfix.

  6. Salve e feche o arquivo.

  7. Gere o mapa de senha SASL usando a chave de API gerada na seção Antes de começar . Substitua your-api-key pela chave de API que você gerou.

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

    postmap /etc/postfix/sasl_passwd
    
  9. Verifique se você possui 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 que contém suas credenciais porque ele não é mais necessário:

    rm /etc/postfix/sasl_passwd
    
  11. Defina as permissões no seu arquivo .db e verifique se o outro arquivo 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. Recarregue sua 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 e-mail de teste:

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

    Substitua o seguinte:

    • message : o corpo do e-mail.
    • subject : O assunto do e-mail.
    • email@example.com : o endereço de e-mail para o qual você deseja enviar uma mensagem.

    Procure nos logs do sistema uma linha de status contendo status e o código de resposta do servidor bem-sucedido (250) :

    Debian

    tail -n 5 /var/log/syslog
    

    CentOS

    tail -n 5 /var/log/maillog
    

Enviando e-mail com Java em sua instância

Conecte-se à sua instância do tutorial sendgrid usando 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 e-mail

As instruções a seguir usam a biblioteca cliente SendGrid Java para construir e enviar uma mensagem de email por meio do SendGrid. Você pode ver o exemplo completo no GitHub .

No seu terminal SSH:

  1. Torne-se um superusuário e defina uma umask segura:

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

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

    git clone https://github.com/GoogleCloudPlatform/java-docs-samples.git
    
  4. Vá para o 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 SendGrid.

    • Substitua your-sendgrid-from-email pelo endereço de e-mail do qual você deseja enviar mensagens.

    • Substitua destination-email pelo endereço de e-mail para o qual deseja enviar e-mails.

  6. Vá para o diretório raiz do código de exemplo:

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

    mvn clean package
    
  8. Vá para o novo diretório target :

    cd target
    
  9. Defina permissões que permitem executar o arquivo jar:

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

    update-alternatives --config java
    

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

  11. Execute o arquivo Java:

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

Enviando e-mail com Node.js em sua instância

Para executar este exemplo, você deve ter Node.js versão 7.6 ou posterior instalado na instância de VM.

Conecte-se à sua instância do tutorial sendgrid usando 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 e-mail

No seu terminal SSH:

  1. Torne-se um superusuário e defina uma umask segura:

    sudo su -
    umask 077
    
  2. Atualize seus 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 padrã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 SendGrid Node.js:

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

    git clone https://github.com/GoogleCloudPlatform/nodejs-docs-samples.git
    
  7. Acesse o diretório que contém a amostra SendGrid:

    cd nodejs-docs-samples/compute
    
  8. Copie o arquivo 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 SendGrid.

    • Substitua from-email@example.com pelo endereço de e-mail do qual você deseja enviar mensagens.

    • Substitua to-email@example.com pelo endereço de e-mail para o qual você deseja enviar mensagens.

    // 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
    

Enviando email de um servidor de transporte de borda do Exchange

Você pode configurar o Microsoft Exchange para enviar emails de saída com SendGrid configurando um conector de envio de saída. Para obter detalhes, consulte Implantação do Microsoft Exchange Server 2016 no Compute Engine .

Limpar

Para evitar cobranças na sua conta do Google Cloud pelos recursos usados ​​neste tutorial, exclua o projeto que contém os recursos ou mantenha o projeto e exclua os recursos individuais.

Exclua o projeto

A maneira mais fácil de eliminar o faturamento é excluir o projeto que você criou para o tutorial.

Para excluir 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.

Exclua sua instância do Compute Engine

Para excluir 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 vem a seguir

Explore arquiteturas de referência, diagramas e práticas recomendadas sobre o Google Cloud. Dê uma olhada em nosso Centro de Arquitetura de Nuvem .