Para realizar el envío de correos a través de firebase utilizaremos Cloud Functions, la cual permite ejecutar funciones Javascript en la nube.

Un requisito para poder crear nuestras funciones, es que debemos tener instalado Firebase CLI, para ello ejecutamos el siguiente comando:

npm install -g firebase-tools

Posteriormente debemos iniciar sesión, por lo cual ejecutamos en siguiente comando:

firebase login

Esto nos abrirá una pestaña en nuestro navegador, lo único que debemos hacer es ingresar con nuestra cuenta de Google y permitir el acceso a firebase-cli.

Una vez hecho lo anterior procedemos a crear nuestro proyecto, para lo cual recomiendo que crees una carpeta con el nombre que consideres adecuado, desde cmd accedemos a la carpeta que hayamos creado y ejecutaremos el siguiente comando para crear la estructura del proyecto:

firebase init functions

Nos va a preguntar si estamos seguros de proceder, le decimos que si, a continuación, nos pedirá que le indiquemos a que proyecto de firebase pertenecerán dichas funciones.

Firebase CLI Init project

Ahora nos pide que indiquemos que lenguaje queremos usar (Javascript/Typescript), vamos a seleccionar Javascript.

Firebase CLI Language

Nos va a preguntar si queremos usar ESLint e instalar las dependencias con npm, le diremos que no, ahora nos va a generar una serie de archivos y la carpeta functions en la carpeta que creamos.

Nosotros nos vamos a centrar en la carpeta functions, específicamente en los archivos index.js y package.json, el index contendrá nuestra función para el envío de correos, mientras que el package tendrá nuestras librerías.

Dentro de la carpeta ejecutaremos el siguiente comando para la instalación de las librerías necesarias (cors, firebase-admin y nodemailer).

npm install –s cors firebase-admin nodemailer

Una vez instaladas nuestras librerías comenzaremos con la creación de la función.

En el archivo index.js debemos importar nuestras librerías.

const functions = require('firebase-functions');
const admin = require('firebase-admin');
const nodemailer = require('nodemailer');
const cors = require('cors')({origin: true});

También en necesario que inicialicemos nuestra aplicación con admin.initializeApp().

admin.initializeApp();

Ya que importamos las librerías e inicializamos nuestra aplicación, procedemos con la creación de la función, esta será una función http que podremos ejecutar desde un navegador mediante la URL. El correo que se enviará, va a salir desde nuestra cuenta de Gmail, para ellos en necesario el configurar nuestro correo y contraseña. A continuación, el código de la función:

let transporter = nodemailer.createTransport(
    {
        service: 'gmail',
        auth: {
            user: 'tucorreo@gmail.com',
            pass: 'tupassword'
        }
    });

exports.email = functions.https.onRequest((req, res) => {
    cors(req, res, () => {
        //Aqui podemos obtener el correo desde la url
        //en el caso de que se hiciera mediante post usando Express
        // seria req.body.email -> si se tratara de un JSON

        const destino = req.query.destino;
        const mailOptions = {
            from: 'Tu nombre ',
            to: destino, subject: 'Envio desde firebase',
            // Asunto del correo            
            html: `

Cuerpo del correo
`
        };
        // Por último se retorna el resultado       
        return transporter.sendMail(mailOptions, (error, info) => { if (error) { return res.send(erro.toString()); } return res.send('Enviado'); });
    });
});

Una vez hecha la función, la deployamos con el siguiente comando:

firebase deploy

Ya que se haya subido correctamente la función, la ejecutamos desde la URL que nos indica firebase, en mi caso es https://us-central1-test-bd-3ea2a.cloudfunctions.net/email?destino=tucorreo@dominio.com.

Firebase CLI url function

Eso es todo, ya podemos realizar envío de correos a traves firebase.