1

ウェブサイトのお問い合わせフォームを作成しています。Angular js を介してフォーム送信を Firebase に追加しています。新しい送信が Firebase に送信されると、Node で child_added を使用して nodemailer をトリガーします。これは正常に機能していますが、開発サーバーを再起動するたびに送信コレクション全体が再メール送信され、Heroku の本番環境では毎日複数回送信されます。メールが複数回送信されないようにするにはどうすればよいですか?

var myRoot = new Firebase('https://firebase.firebaseio.com/website/submissions');

myRoot.on('child_added', function(snapshot) {
    var userData = snapshot.val();
    var smtpTransport = nodemailer.createTransport("SMTP",{
        auth: {
            user: "email@gmail.com",
            pass: "password"
        }
    });

var mailOptions = {
    from: "Website <email@gmail.com>", // sender address
    to: "email@email.com.au", // list of receivers
    subject: "New  Website Lead", // Subject line
    html: "<p><strong>Name: </strong>" + userData.name + "</p>" + "<p><strong>Email: </strong>" + userData.email + "</p>" + "<p><strong>Phone: </strong>" + userData.phone + "</p>" + "<p><strong>Enquiry: </strong>" + userData.enquiry + "</p>" + "<p><strong>Submitted: </strong>" + userData.date + "</p>" // html body
};

smtpTransport.sendMail(mailOptions, function(error, response) {
    if(error) {
        console.log(error);
    }
    else {
        console.log("Message sent: " + response.message);
    }
    smtpTransport.close();
    });
});
4

2 に答える 2

1

子が追加されるたびに、その子を Firebase の別のブランチに移動します (イベントの記録が必要ない場合は、単に子を削除します)。

on('child_added', function(oldSnap) {
    eventHistoryRef.push(oldSnap.val());
    oldSnap.ref().remove();
    // use nodemailer
});
于 2013-11-01T07:52:25.240 に答える