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.
Antes de começar
- 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.
-
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 theresourcemanager.projects.create
permission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
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 theresourcemanager.projects.create
permission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
- In the Google Cloud console, go to the Create an instance page.
-
Set Name to
sendgrid-tutorial
. - In the Boot disk section, click Change to begin configuring your boot disk.
- No separador Public images, escolha a Debian or CentOS image version.
- Clique em Selecionar.
- Para criar a VM, clique em Criar.
-
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
. - Crie uma chave da API:
- Inicie sessão no SendGrid e aceda a Settings > API Keys.
- Crie uma chave da API.
- Selecione as autorizações para a chave. No mínimo, a chave tem de ter autorizações de envio de correio para enviar emails.
- Clique em Guardar para criar a chave.
- 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
- In the Google Cloud console, go to the VM instances page.
- 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.
Torne-se um superutilizador:
sudo su -
Defina uma umask segura:
umask 077
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.
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 textonano
, introduza o seguinte comando:nano /etc/postfix/main.cf
Atualize o ficheiro:
Comente as seguintes linhas:
# default_transport = error # relay_transport = error
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.
Guarde e feche o ficheiro.
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
Use o utilitário
postmap
para gerar um ficheiro.db
:postmap /etc/postfix/sasl_passwd
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
Remova o ficheiro que contém as suas credenciais, uma vez que já não é necessário:
rm /etc/postfix/sasl_passwd
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
Atualize a configuração para carregar os parâmetros modificados:
Debian
/etc/init.d/postfix restart
CentOS
postfix reload
Instale o pacote
mailutils
oumailx
:Debian
apt -y install mailutils
CentOS
yum install mailx -y
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
- In the Google Cloud console, go to the VM instances page.
- 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:
Torne-se superutilizador e defina uma umask segura:
sudo su - umask 077
Instale o Java e o Maven:
apt -y update && apt -y install git-core openjdk-11-jdk maven
Clone o repositório do GitHub:
git clone https://github.com/GoogleCloudPlatform/java-docs-samples.git
Aceda ao código-fonte principal do exemplo:
cd /root/java-docs-samples/compute/sendgrid/src/main/java/com/example/compute/sendgrid
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.
Aceda ao diretório raiz do exemplo de código:
cd /root/java-docs-samples/compute/sendgrid
Empacote a classe Java:
mvn clean package
Aceda ao novo diretório
target
:cd target
Defina autorizações que lhe permitam executar o ficheiro JAR:
chmod +x compute-sendgrid-1.0-SNAPSHOT-jar-with-dependencies.jar
Execute o seletor de versão Java alternativo:
update-alternatives --config java
Selecione a opção
java-11-openjdk-amd64
.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
- In the Google Cloud console, go to the VM instances page.
- 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:
Torne-se superutilizador e defina uma umask segura:
sudo su - umask 077
Atualize os repositórios de pacotes:
Debian
apt update
CentOS
yum update -y
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
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
Instale o cliente Node.js do SendGrid:
npm install sendgrid
Clone o repositório de exemplo:
git clone https://github.com/GoogleCloudPlatform/nodejs-docs-samples.git
Aceda ao diretório que contém o exemplo do SendGrid:
cd nodejs-docs-samples/compute
Copie o ficheiro
sendgrid.js
:cp sendgrid.js sendmail.js
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.
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:
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- 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:
- In the Google Cloud console, go to the VM instances page.
-
Select the checkbox for
your
sendgrid-tutorial
instance. - 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.