【问题标题】:Email notifications in firebaseFirebase 中的电子邮件通知
【发布时间】:2017-01-05 04:52:56
【问题描述】:

我想知道是否有人知道在创建、更新或删除 firebase 中的特定节点时发送电子邮件的方法?

更具体地说,我有一个网络服务,用户可以在其中预订一段时间。我使用 Firebase 作为后端来存储用户信息等,但我想在预订发生时向用户的电子邮件地址发送确认信息。我知道以前使用 Zapier 可以做到这一点,但他们不再支持 Firebase。

任何人对如何在 Firebase 中发送电子邮件通知有解决方法或想法?

【问题讨论】:

  • 您使用私人后端服务器还是仅使用 firebase?
  • 由于 Zapier 不再工作,只剩下option 2 from this answer:运行你自己的应用服务器。
  • @tobifasc 我使用的是 firebase 服务器,并且在我托管实际网页的 godaddy 上也有一个帐户。
  • 不幸的是,我无法帮助您与 Godaddy。我没有这方面的经验。但基本上,firebase 有能力监听数据更新。
  • @tobiasfc 所以,你的建议是我创建某种服务器端脚本来监听这些事件,然后发送电子邮件。我只有 web 开发经验,主要是 javascript 和一点 PHP,你对如何做到这一点有任何建议或资源吗?非常感谢。

标签: firebase firebase-realtime-database email


【解决方案1】:

搜索了一些后,我发现没有直接的插件。我联系了 firebase 支持团队,他们正在考虑自己创建这个功能;但是,尚未决定何时以及如何。
有不同的可能性,但它们都需要某种后端编码,这意味着可以监视这些变化的服务器。
我登陆node.js,因为这与我通常使用的最相似,即javascript。
通过 npm 包含 nodemailerfirebase基于 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 都可以工作。希望这对某人有帮助! :)

【讨论】:

  • 除了添加密码还有其他方法吗?我没有节点经验,但是可以通过检查网络来读取密码?我知道这不是最好的解决方案,但我添加了一个 webview,它在添加数据时加载一个 php 邮件脚本
  • 我忘了说我把 webview 隐藏了
猜你喜欢
  • 2011-12-16
  • 2015-11-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多