2016-08-29 3 views
11

Я хотел бы узнать, знает ли кто-нибудь, как вы можете отправить электронное письмо, когда создается, обновляется или удаляется определенный узел в firebase?Уведомления электронной почты в firebase

В частности, у меня есть веб-служба, в которой пользователи могут зарезервировать друг друга в течение определенного периода времени. Я использую Firebase в качестве бэкэнд для хранения информации о пользователях и т. Д., Но я хочу отправить подтверждение на адрес электронной почты пользователей всякий раз, когда происходит бронирование. Я понимаю, что это было возможно с помощью Zapier, однако они больше не поддерживают Firebase.

Любой, у кого есть обходной путь или идея о том, как отправлять уведомления по электронной почте в Firebase?

+0

Вы работаете с частным серверным сервером или только с firebase? – tobifasc

+0

Поскольку Zapier больше не работает, остается только [вариант 2 из этого ответа] (http://stackoverflow.com/questions/28656191/send-email-when-match-in-firebase-database): запустите собственный сервер приложений. –

+0

@tobifasc Я работаю с сервером firebase, а также имею учетную запись на godaddy, где я размещаю фактическую веб-страницу. –

ответ

13

После поиска еще несколько я обнаружил, что нет прямого плагина. Я связался с командой поддержки firebase, и они планируют сами создать эту функциональность; однако, когда и как еще не принято решение.
Существуют разные возможности, но все они требуют какого-то кодирования заднего конца, что означает сервер, который может следить за этими изменениями.
Я приземлился на node.js, поскольку это больше всего похоже на то, над чем я обычно работаю, то есть javascript.
Включив 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 будет работать. Надеюсь, это поможет кому-то! :)

+0

Есть ли другой способ вместо добавления пароля? У меня нет опыта в узле, но пароль можно прочитать, просмотрев веб-страницы? Я знаю, что это не лучшее решение, но я добавил веб-просмотр, который загружает скрипт php mail при добавлении данных. – Jaco

+0

Я забыл сказать, что я скрыл веб-просмотр – Jaco