2016-08-29 27 views
11

Firebase'de belirli bir düğüm oluşturulduğunda, güncellendiğinde veya silindiğinde, e-postayı gönderebileceğiniz bir yolu bilip bilmediğini öğrenmek ister misiniz?Firebase'de e-posta bildirimleri

Daha açık bir şekilde, kullanıcıların bir süreliğine birbirlerini ayırabilecekleri bir web servisim var. Kullanıcı bilgilerini depolamak için Firebase'i arka uç olarak kullanıyorum, ancak bir rezervasyon gerçekleştiğinde kullanıcıların e-posta adreslerine bir onay göndermek istiyorum. Bunun daha önce Zapier kullanmanın mümkün olduğunu, ancak artık Firebase'i desteklemediğini anlıyorum.

Firebase'de e-posta bildirimlerinin nasıl gönderileceğine dair bir geçici çözüm veya fikir olan herkes var mı?

+0

Özel bir arka uç sunucusu veya yalnızca ateş alanı ile çalışıyor musunuz? – tobifasc

+0

Zapier artık çalışmadığından, yalnızca [bu seçeneğin 2. seçeneği] (http://stackoverflow.com/questions/28656191/send-email-when-match-in-firebase-database) hala geçerli: kendi uygulama sunucunuzu çalıştırın. –

+0

@tobifasc Bir firebase sunucusuyla çalışıyorum ve aynı zamanda gerçek web sayfasını barındıran godaddy'de bir hesabım var. –

cevap

13

Daha fazla arama yaptıktan sonra, doğrudan eklenti olmadığını gördüm. Firebase destek ekibi ile iletişime geçtim ve bu işlevleri kendileri oluşturmayı düşünüyorlar; Ancak, ne zaman ve nasıl henüz karar verilmez.
Farklı olasılıklar var ancak bunların tümü, arka planda kodlama gerektiren bir tür kodlama gerektirir; bu, bu değişiklikleri izleyebilecek bir sunucu anlamına gelir.
node.js'a iniş yaptım, çünkü bu genellikle üzerinde çalıştığım işe benzer, yani javascript.

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'); 
        } 
       }); 
      }); 

    } 

}); 

Bu örnek Firebase on_child_added olayını dinler ancak herhangi firebase event çalışacaktır: Firebase etkinliğe dayalı NPM aracılığıyla nodemailer ve firebase dahil ederek
, gönderme e-postalar bu gibi sağlandı. Umarım bu birisine yardım eder! :)

+0

Parola eklemek yerine başka bir yol var mı? Düğümde deneyimim yok, ancak web inceleyerek şifre okunabilir mi? Bunun en iyi çözüm olmadığını biliyorum, ancak veri eklendiğinde php mail komut dosyasını yükleyen bir webview ekledim – Jaco

+0

Webview'ı gizlediğimi söylemeyi unuttum – Jaco