Уведомления по электронной почте в firebase

Я хотел бы знать, знает ли кто-нибудь способ отправки электронной почты, когда создается, обновляется или удаляется конкретный node в firebase?

В частности, у меня есть веб-сервис, в котором пользователи могут заказывать друг друга в течение определенного периода времени. Я использую Firebase в качестве бэкэнд для хранения информации о пользователях и т.д., Но я хочу отправить подтверждение на адрес электронной почты пользователей всякий раз, когда происходит бронирование. Я понимаю, что это было ранее возможно с помощью Zapier, однако они больше не поддерживают Firebase.

Любой, у кого есть обходной путь или идея о том, как отправлять уведомления по электронной почте в Firebase?

Ответ 1

После поиска еще несколько я обнаружил, что нет прямого плагина. Я связался с командой поддержки firebase, и они планируют сами создать эту функциональность; однако, когда и как еще не принято решение.
Существуют разные возможности, но все они требуют какого-то кодирования заднего конца, что означает сервер, который может следить за этими изменениями.
Я приземлился на node.js, поскольку это больше похоже на то, над чем я обычно работаю, то есть javascript.
Включив nodemailer и firebase через npm, отправка электронной почты на основе события firebase была достигнута следующим образом:

var firebase = require("firebase");

var mainApp = firebase.initializeApp({
    //firebase authentication
});

var directTransport = require('nodemailer-direct-transport');
var nodemailer = require('nodemailer');
var options = {};
var transporter = nodemailer.createTransport(directTransport(options))

var nodemailer = require('nodemailer');

var transporter = nodemailer.createTransport({
    service: 'gmail',
    auth: {
        user: 'example.gmail.com'
        pass: 'password'
    }
});

var nodeToWatch = mainApp.database().ref('node_to_watch'); //firebase node to watch

nodeToWatch.on('child_added', function(childSnapshot) { //fires once for every node in this location
    if(!childSnapshot.val().email_sent){ //check if email has already been sent

            nodeToWatch.child(childSnapshot.key).child('email_sent').set(firebase.database.ServerValue.TIMESTAMP).then(function(response){ //set email value to sent

                var data = JSON.stringify(childSnapshot.val(), null, 9); //stringify the response so we can attach it in the email

                // create template based sender function
                var sendInfo = transporter.templateSender({
                    subject: 'Node in firebase updated',
                    html: 'Hello, data for new node is: {{data}}
                }, {
                from: 'example.gmail.com'
                });

                // use template based sender to send a message
                sendInfo({
                    to: 'exampleRecipient.email.com'
                }, {
                    data: data //data variable to insert into email
                }, function(err, info){
                    if(err){
                        console.log(err);
                    }
                    else{
                        console.log('Email sent');
                    }
                });
            });

    }

});

В этом примере прослушивается событие firebase on_child_added, но любое событие