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.
Ahora nos pide que indiquemos que lenguaje queremos usar (Javascript/Typescript), vamos a seleccionar Javascript.
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.
Eso es todo, ya podemos realizar envío de correos a traves firebase.