簡體   English   中英

Nodemailer使用MongoDB的多個收件人郵件

[英]Nodemailer multiple recipient mail with MongoDB

創建新帖子后,我試圖通過電子郵件向我網站上的每個用戶發送電子郵件。 我遇到的問題是,只有一個用戶會在收到電子郵件時被發送電子郵件。 這是向每個用戶發送電子郵件的代碼:

User.find({}, function(err, allUsers){
            if(err){
                req.flash("error", "We seem to be experiencing issues. Please try again later.");
                console.log(err);
                return res.redirect("/");
            }
            allUsers.forEach(function(users){
                console.log(users);
                var smtpTransport = nodemailer.createTransport({
                    service: 'Gmail', 
                    auth: {
                        user: 'email@email.com',
                        pass: 'password'
                    }
            });
                var mailOptions = {
                    to: users.email,
                    from: 'email@email.com',
                    subject: 'A new post has been created!',
                    text: 'You are receiving this because you have requested to recieve notifications when a new post is created.\n\n' +
                          'If you would like to view this post please login to website.com\n'
                };
                smtpTransport.sendMail(mailOptions, function(err) {
                    if(err){
                        req.flash("error", "We seem to be experiencing issues. Please try again later.");
                        console.log(err);
                        return res.redirect("/");
                    }
                });
                console.log(users.email);
                res.redirect("/admin");
          });
        });

兩者都console.log(x); 當它們應記錄10個以上的用戶時,它們返回相同的單個用戶。 如果我刪除res.redirect("/admin"); 在函數底部,我收到兩個錯誤:

Error: No recipients defined

Error: Can't set headers after they are sent.

任何答復將不勝感激。 提前致謝。

編輯:我自己想出了一個解決方案,以后會在這里發布給任何人。

User.find({}, function(err, allUsers){
            if(err){
                console.log(err);
            }
            var mailList = [];
            allUsers.forEach(function(users){
                mailList.push(users.email);
                return mailList;
            });
            var smtpTransport = nodemailer.createTransport({
                service: 'Gmail', 
                auth: {
                    user: 'email@email.com',
                    pass: "password"
                }
            });
            var mailOptions = {
                    to: [],
                    bcc: mailList,
                    from: 'email@email.com',
                    subject: 'Subject',
                    text: 'blah blah blah\n\n' +
                    'blah blah blah\n\n' +
                    'blah blah blah\n'
                };
                smtpTransport.sendMail(mailOptions, function(err) {
                    if(err){
                        console.log(err);
                        req.flash("error", "We seem to be experiencing issues. Please try again later.");
                        res.redirect("/");
                    }
                    console.log('mail sent to ' + mailList);
                });
        });
        res.redirect("/admin");

這是代碼的重構,我希望它能起作用:

var smtpTransport = nodemailer.createTransport({
                    service: 'Gmail', 
                    auth: {
                        user: 'email@email.com',
                        pass: 'password'
                    }
            });
function sedEmail(toEmail){
                var mailOptions = {
                    to: toEmail,
                    from: 'email@email.com',
                    subject: 'A new post has been created!',
                    text: 'You are receiving this because you have requested to recieve notifications when a new post is created.\n\n' +
                          'If you would like to view this post please login to website.com\n'
                };
                smtpTransport.sendMail(mailOptions, function(err) {
                    if(err){
                        req.flash("error", "We seem to be experiencing issues. Please try again later.");
                        console.log(err);
                    }
                });

}
User.find({}, function(err, allUsers){
            if(err){
                req.flash("error", "We seem to be experiencing issues. Please try again later.");
                console.log(err);
                return res.redirect("/");
            }
         for(var i = 0; i<allUsers.length; i++){
            sedEmail(allUsers[i].email);
          }
          res.redirect("/admin");

        });
User.find({}, function(err, allUsers){
            if(err){
                console.log(err);
            }
            var mailList = [];
            allUsers.forEach(function(users){
                mailList.push(users.email);
                return mailList;
            });
            var smtpTransport = nodemailer.createTransport({
                service: 'Gmail', 
                auth: {
                    user: 'email@email.com',
                    pass: "password"
                }
            });
            var mailOptions = {
                    to: [],
                    bcc: mailList,
                    from: 'email@email.com',
                    subject: 'Subject',
                    text: 'blah blah blah\n\n' +
                    'blah blah blah\n\n' +
                    'blah blah blah\n'
                };
                smtpTransport.sendMail(mailOptions, function(err) {
                    if(err){
                        console.log(err);
                        req.flash("error", "We seem to be experiencing issues. Please try again later.");
                        res.redirect("/");
                    }
                    console.log('mail sent to ' + mailList);
                });
        });
        res.redirect("/admin");

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM