2016-08-29 5 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에 착륙했습니다.

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

    } 

}); 

이 예는 중포 기지 on_child_added 이벤트를 수신하지만 어떤 firebase event 작동합니다 : 중포 기지 이벤트를 기반으로 NPM을 통해 nodemailerfirebase을 포함하여
, 보내는 이메일이 같이 이루어졌다. 희망이 사람을 돕는다! :)

+0

암호를 추가하는 대신 다른 방법이 있습니까? 노드에 경험이 없지만 웹을 검사하여 암호를 읽을 수 있습니까? 나는 그것이 최선의 해결책이 아니라는 것을 알고 있지만, 데이터가 추가 될 때 PHP 메일 스크립트를로드하는 webview를 추가했습니다. – Jaco

+0

나는 webview를 숨겨 놓는 것을 잊어 버렸습니다. – Jaco