Как отправить письмо, используя цикл и обновить каждую запись? - PullRequest
0 голосов
/ 17 мая 2019

Я реализовал nodemailer для отправки писем. для деталей электронной почты, таких как идентификатор электронной почты, тема и текст, у меня есть таблица в БД. в этой таблице у меня был флаг (новый, обработанный), чтобы получить список новых записей, чтобы я мог отправлять почту новых записей Я использую для цикла в списке записей для отправки электронных писем. я хочу знать, что после успешной пересылки почты я хочу обновить флаг записи в БД. Я использую sequlize в node.js.


var WEBDialerList=[];
var WEBDialerListCount;

SqlObj.WEBDialer.findAll(
        {
            where: {
                IsDeleted: 0,
                Status: 'New'
            }
        }
    )
        .then(data => {
            WEBDialerList = JSON.parse(JSON.stringify(data));
            console.log("d.length")
            console.log(WEBDialerList.length)
            console.log("d.length")
            if (WEBDialerList.length > 0) {
                for (var i in WEBDialerList){//= 0; i < WEBDialerList.length; i++) {
                    WEBDialerListCount = i;

                    "use strict";
                    const nodemailer = require("nodemailer");
                    let transporter = nodemailer.createTransport({
                        service: "Gmail",
                        auth: {
                            user: 'abc@gmail.com',
                            pass: '******'
                        }
                    });
                    var e = WEBDialerList[i].Email;
                    let mailOptions = {

                        from: '"ib ik" <ib.ik2093@gmail.com>',
                        to: e,

                        subject: "Test Email from Node.js",
                        text: " scheduler Hello, this is a test email.  I have configured my gmail account in node.js to send emails. I am checking, is it configured correctly.",// plain text body
                        html: "<b> " + WEBDialerList[i].WEBDialerId + " scheduler Hello, this is a test email.  I have configured my gmail account in node.js to send emails. I am checking, is it configured correctly.</b>" // html body
                    };
                     transporter.sendMail(mailOptions, function (error, info) {
                        if (error) {
                            return console.log(error);
                        }
                        else {
                            console.log("Message sent1: ", info);
                            console.log(WEBDialerListCount)
                            transporter.close();
                        }
                    })

                }
            }
        })
        .catch(function (err) {
            console.log(err)
        });





В transporter.sendMail я просто получаю его в конце цикла, поэтому мне сложно получить записи, которые необходимо обновить.

Ответы [ 2 ]

0 голосов
/ 17 мая 2019

Пожалуйста, вместо обещаний ожидайте асинхронного кода, чтобы он выглядел хорошо и легко читался.

Вот решение вашего вопроса.

Promis.all(
  WEBDialerList.map(WEBDialer => {
    let mailOptions = {
      from: '"ib ik" <ib.ik2093@gmail.com>',
      to: WEBDialer.email,

      subject: "Test Email from Node.js",
      text: " scheduler Hello, this is a test email.  I have configured my gmail account in node.js to send emails. I am checking, is it configured correctly.",// plain text body
      html: "<b> " + WEBDialer.WEBDialerId + " scheduler Hello, this is a test email.  I have configured my gmail account in node.js to send emails. I am checking, is it configured correctly.</b>" // html body
    };
    return new Promise((resolve, reject) => {
      transporter.sendMail(mailOptions, function (error, info) {
        if (error) {
          reject(error)
        } else {
          console.log("Message sent1: ", info);
          console.log(WEBDialerListCount)
          // Update user here
          transporter.close();
          resolve()
        }
      })  
    })
  })
)

Пожалуйста, внесите необходимые изменения в соответствии с вашими требованиями.

Дайте мне знать, если вам нужна дополнительная помощь или что-то, о чем вы хотите спросить.

Надеюсь тебе понравится :) 1010 *

0 голосов
/ 17 мая 2019

Возможное решение может быть:

[..]

// Move this declarations out is a good idea
const nodemailer = require("nodemailer");
let transporter = nodemailer.createTransport({
    service: "Gmail",
    auth: {
         user: 'foobar@gmail.com',
         pass: 'foobar'
    }
});

[..]

for (var i in WEBDialerList) {
    [..]

    transporter.sendMail(mailOptions, function (error, info) {
        if (error) {
            sql.setFlag('errored') // pseudocode
        } else {
            sql.setFlag('processed') // pseudocode
            transporter.close();
         }
    })
}

[..]

PS: удалите свои учетные данные gmail!

...