web-dev-qa-db-ja.com

Firebaseのメール通知

Firebaseの特定のノードが作成、更新、または削除されたときにメールを送信する方法を誰かが知っているかどうか知りたいですか?

具体的には、ユーザーが一定期間互いに予約できるWebサービスがあります。 Firebaseをバックエンドとして使用してユーザー情報などを保存していますが、予約が発生するたびにユーザーのメールアドレスに確認を送信したいと思います。以前はZapierを使用してこれが可能であったことを理解していますが、Firebaseはサポートされなくなりました。

Firebaseでメール通知を送信する方法の回避策やアイデアを持っている人はいますか?

14

さらに検索したところ、直接プラグインがないことがわかりました。私はfirebaseサポートチームに連絡しましたが、彼らはこの機能を自分で作成することを検討しています。ただし、いつどのように決定されるかはまだ決まっていません。
さまざまな可能性がありますが、すべて、何らかのバックエンドコーディングが必要です。つまり、これらの変更を監視できるサーバーを意味します。
node.js に着陸しました。これは、私が通常取り組んでいるもの、つまりJavaScriptに最も似ているためです。
npmを通じて nodemailer および firebase を含めることにより、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イベントをリッスンしますが、 firebase event は機能します。これが誰かを助けることを願っています! :)

14