Como enviar e-mails usando Cloud Functions do Firebase com o Nodemailer

Adson Rocha
Jul 26, 2017 · 3 min read

Envio de e-mails de redefinição de senha ou e-mails de boas vindas podem ser facilmente realizados com o uso das Cloud Functions do Firebase em um projeto web/híbrido.

O primeiro passo é criar um projeto e configurar o Firebase. Veja como fazer isso em um projeto Ionic, nesse outro tutorial: clique aqui.

Usando a ferramenta de linha de comandos (cmd do Windows) vamos instalar o firebase-tools :

npm install -g firebase-tools

É provável que esse comando só seja executado se você estiver usando a janela de comandos logado com um perfil de administrador do computador.

Ainda via interface de linha de comandos, na pasta do seu projeto, execute:

firebase loginfirebase init functions

Nas opções que se abrem, escolha seu projeto na lista exibida em “Select a default Firebase project for this directory”. Basta usar as setas do teclado de para cima e para baixo e depois confirmar com “Enter”.

Um diretório functions vai ser criado no seu projeto com um pacote Node.js pré-configurado.

Na opção “Do you want to install dependencies with npm now?”, digite y e confirme.

A inicialização das Firebase Cloud Functions agora está completa!

Enviando E-mail

Vamos usar o NodeMailer para realizar os envios, juntamente com uma conta Gmail.

Você vai precisar configurar essa conta Gmail para aceitar conexões menos seguras: https://myaccount.google.com/lesssecureapps

Marque o seletor que aparece nessa tela e deixe-o na posição “Ativado”.

Na pasta /functions do seu projeto, via linha de comando, execute:

npm install nodemailer --save

e depois:

npm install cors --save

Note que, no arquivo package.json dessa pasta, a dependencia do nodemailer e do cors foi adicionada:

{
"name": "functions",
"description": "...",
"dependencies": {
...
"cors": "^2.8.4",
"nodemailer": "^4.0.1"
},
...
}

Abra o arquivo /functions/index.js e inclua o código para a configuração do Nodemailer:

Na linha 6 do código acima, substitua os dados <SEU-EMAIL> e <SUA-SENHA> pelos valores da sua conta de e-mail.

Note que usamos o módulo cors para resolver problemas de acesso entre domínios.

A função eviarEmail da linha 9 recebe uma série de parâmetros via POST, como o assunto, lista de destinatários e o corpo do e-mail a ser enviado.

A função sendMail do objeto transporter , na linha 26 faz então o envio do e-mail via SMTP.

Fazendo o deploy da função no Firebase

Para usar funções do Cloud Functions, é necessário que você as hospede remotamente. Isso faz com que o Firebase crie uma URL única para chamar sua função.

Na pasta do seu projeto, via linha de comandos, execute:

firebase deploy --only functions

Aguarde até que sua janela de comandos exiba a mensagem: “Deploy complete!”.

Agora, acesse o seu projeto no console do Firebase (console.firebase.google.com) e clique no menu “Functions”.

Nessa tela, na caixa “Função” ao centro, note que abaixo de cada função hospedada há uma URL de solicitação, na forma:

https://us-central1-xxx-xxx.cloudfunctions.net/suaFuncao

Nós vamos usar esse endereço no formulário de envio do e-mail em alguma página HTML do seu projeto:

<form action="<URL>" method="post">   
<label>Assunto:</label>
<input type="text" name="assunto">

<label>Destinatários:</label>
<input type="text" name="destinatarios">

<label>Mensagem:</label>
<input type="text" name="corpo">

<button type="submit">Enviar</button>
</form>

Substitua <URL> pelo endereço da função hospedada no Firebase. Vale ressaltar que o atributo method do elemento form deve ser post e que os valores dos atributos name dos campos do formulário devem ser os mesmos que você usou no código da função enviarEmail , mais especificamente nas linhas em que se fazem:

let variavel = req.body['campo']

Tudo pronto! Se gostou, curta o tutorial e compartilhe!

Até a próxima.

Adson Rocha

Written by

Ph.D. in Computer Engineering and professor at Goiano Federal Institute (Brazil).

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade