2016-08-29 9 views
11

Chciałbym wiedzieć, czy ktokolwiek zna sposób, w jaki można wysłać wiadomość e-mail, gdy określony węzeł w bazie jest tworzony, aktualizowany lub usuwany?Powiadomienia e-mail w firebase

Dokładniej, mam usługę internetową, w której użytkownicy mogą rezerwować się nawzajem na pewien okres. Używam Firebase jako zaplecza do przechowywania informacji o użytkowniku itd., Ale chcę wysłać potwierdzenie na adres e-mail użytkowników za każdym razem, gdy miała miejsce rezerwacja. Rozumiem, że wcześniej było to możliwe przy użyciu Zapiera, ale nie obsługują one już Firebase.

Ktoś, kto ma obejście lub pomysł, jak wysyłać powiadomienia e-mail w Firebase?

+0

Czy pracujesz z prywatnym serwerem zaplecza lub tylko firebase? – tobifasc

+0

Ponieważ Zapier nie działa, tylko [opcja 2 z tej odpowiedzi] (http://stackoverflow.com/questions/28656191/send-email-when-match-in-firebase-database) pozostaje: uruchom swój własny serwer aplikacji. –

+0

@tobifasc Pracuję z serwerem bazy firebase, a także mam konto w serwisie godaddy, w którym prowadzę rzeczywistą stronę internetową. –

Odpowiedz

13

Po przeszukaniu niektórych wyników stwierdziłem, że nie ma bezpośredniej wtyczki. Skontaktowałem się z zespołem wsparcia Firebase i zastanawiają się nad samodzielnym utworzeniem tej funkcji; jednak, kiedy i jak jeszcze nie zdecydowano.
Istnieją różne możliwości, ale wszystkie wymagają pewnego rodzaju kodowania z tyłu, co oznacza serwer, który może obserwować te zmiany.
Wylądowałem na node.js, ponieważ jest najbardziej podobny do tego, nad którym zwykle pracuję, tj. Javascript.
Włączając nodemailer i firebase przez KMP, wysyłanie e-maili w oparciu o Firebase imprezy został osiągnięty jak to:

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

    } 

}); 

Przykład ten nasłuchuje na Firebase on_child_added razie jednak każdy firebase event zadziała. Mam nadzieję, że to pomoże komuś! :)

+0

Czy istnieje inny sposób zamiast dodawać hasło? Nie mam doświadczenia w węźle, ale hasło można odczytać, sprawdzając sieć? Wiem, że to nie jest najlepsze rozwiązanie, ale dodałem przeglądarkę, która ładuje skrypt php mail po dodaniu danych. – Jaco

+0

Zapomniałem powiedzieć, że ukryłem ukryty widok – Jaco