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 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 --savee depois:
npm install cors --saveNote 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 functionsAguarde 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/suaFuncaoNó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.
