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

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 login
firebase 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.