【问题标题】:Firebase Child_Added Successfully Triggering Nodemailer But Sending Duplicates (hosted on Heroku)Firebase Child_Added 成功触发 Nodemailer 但发送重复(托管在 Heroku 上)
【发布时间】:2013-11-12 05:35:46
【问题描述】:

我正在建立一个网站联系表。我通过 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();
    });
});

【问题讨论】:

    标签: heroku firebase nodemailer


    【解决方案1】:

    'child_added' 事件可能不是用于此目的的好选择。该事件并不意味着一个孩子刚刚被新添加到 Firebase 中的某个集合中;当您的ref 具有子对象时,它会为从 Firebase 加载的每个子对象触发,此外还会在新添加子对象时触发。因此,每次加载该集合时(例如,当您重新启动服务器时),您的邮件程序都会为每个加载的子项调用(因此重复)。

    当添加新提交时,您最好发送一个传统的 http 请求以从您的角度操作触发邮件程序。

    我想你可以添加一个字段来指示孩子是否已经被邮寄,并且只邮寄没有参加'child_added' 事件的孩子。但这对我来说似乎很不雅。

    【讨论】:

      【解决方案2】:

      每次添加孩子时,将孩子移动到 Firebase 的不同分支(如果您不需要事件记录,则直接删除孩子)。

      on('child_added', function(oldSnap) {
          eventHistoryRef.push(oldSnap.val());
          oldSnap.ref().remove();
          // use nodemailer
      });
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-09-20
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多