2016-08-29 19 views
11

में ईमेल अधिसूचनाएं मैं जानना चाहूंगा कि अगर कोई फ़ायरबेस बनाया गया है, अपडेट किया गया है या हटा दिया गया है तो कोई ईमेल भेज सकता है या नहीं?फायरबेस

अधिक विशेष रूप से, मेरे पास एक वेब सेवा है जहां उपयोगकर्ता एक-दूसरे के लिए एक-दूसरे को बुक कर सकते हैं। मैं उपयोगकर्ता जानकारी को स्टोर करने के लिए बैकएंड के रूप में फ़ायरबेस का उपयोग करता हूं और इसी तरह, लेकिन जब भी बुकिंग हुई होती है तो मैं उपयोगकर्ताओं के ईमेल पते पर एक पुष्टिकरण भेजना चाहता हूं। मैं समझता हूं कि यह पहले Zapier का उपयोग कर संभव था, हालांकि वे अब Firebase का समर्थन नहीं करते हैं।

कोई भी जिसके पास वर्कअराउंड या फ़ायरबेस में ईमेल अधिसूचनाएं भेजने का विचार है?

+0

क्या आप एक निजी बैकएंड-सर्वर या केवल फायरबेस के साथ काम करते हैं? – tobifasc

+0

चूंकि ज़ापियर अब काम नहीं करता है, केवल [इस उत्तर से विकल्प 2] (http://stackoverflow.com/questions/28656191/send-email-when-match-in-firebase-डेटाबेस) बनी हुई है: अपना स्वयं का ऐप सर्वर चलाएं। –

+0

@tobifasc मैं फ़ायरबेस सर्वर के साथ काम करता हूं और गोडाडी पर भी खाता हूं जहां मैं वास्तविक वेब पेज होस्ट करता हूं। –

उत्तर

13

कुछ और खोज करने के बाद मैंने पाया कि कोई प्रत्यक्ष प्लगइन नहीं है। मैंने फायरबेस समर्थन टीम से संपर्क किया और वे इस कार्यक्षमता को स्वयं बनाने के लिए विचार कर रहे हैं; हालांकि, कब और कैसे तय नहीं किया गया है।
विभिन्न संभावनाएं हैं लेकिन उन्हें सभी को कुछ प्रकार की बैक एंड कोडिंग की आवश्यकता होती है, जिसका अर्थ है कि एक सर्वर जो इन परिवर्तनों को देख सकता है।
मैं node.js पर उतर गया क्योंकि यह आमतौर पर जो काम करता है उसके समान होता है, यानी जावास्क्रिप्ट।
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 घटना के लिए सुनता है, लेकिन किसी भी firebase event काम करेंगे। उम्मीद है कि यह किसी की मदद करता है! :)

+0

पासवर्ड जोड़ने की बजाय कोई और तरीका है? मुझे नोड में अनुभव नहीं है, लेकिन वेब का निरीक्षण करके पासवर्ड पढ़ा जा सकता है? मुझे पता है कि यह सबसे अच्छा समाधान नहीं है, लेकिन मैंने एक वेबव्यू जोड़ा जो डेटा जोड़े जाने पर एक PHP मेल स्क्रिप्ट लोड करता है – Jaco

+0

मैं यह कहना भूल गया कि मैंने वेबव्यू छुपाया है – Jaco