javascript - node.js:循环,通过电子邮件发送查询中的每个匹配行,但它通过 # 匹配数向同一用户发送电子邮件?

标签 javascript mysql node.js email row

我有一个 Node.js 电子邮件服务器,工作正常,但我注意到一个问题。如果查询字符串找到 4 行,它将发送四封电子邮件,但仅发送到第一个结果,而不是发送到每个找到的电子邮件地址。

var mysql = require('mysql');
var nodemailer = require('nodemailer');

// Amazon SES is sending the emails - uses this module for node
var ses = require('nodemailer-ses-transport');
//transport for connecting with Amazon SES
var transporter = nodemailer.createTransport(ses({
accessKeyId: '****************',
SecretAccessKey: '*************'
}));

// Mysql Connection to database
var connection = mysql.createConnection({
*****connection info goes here *****
});
//Connect to mysql database and check for errors
connection.connect(function(err) {
  if (err) {
    console.error('error connecting: ' + err.stack);
    return;}
  });

var querystring1 = 'SELECT `date_created`,`first_name`,`last_name`,`email` FROM `users` WHERE TIMESTAMPDIFF(SECOND,date_created, NOW()) <=298 AND `email`!="" LIMIT 0,5';

connection.query(querystring1, function (err, row) {
if (err) throw err;
for (var i in row) {
// Email content; change text to html to have html emails. row[i].column name will pull relevant database info
var sendit = {
    to: row[i].email,
    from: '******@******',
    subject: 'Hi ' + row[i].first_name + ', Thanks for joining ******!',
    html:  {path:__dirname + '/templates/welcome.html'}
};

// Send emails
transporter.sendMail(sendit,function(error,response){
    if (error) {
        console.log(error);

    }else{
    console.log("Message sent1: " + row[i].first_name);}
transporter.close();}
)
}});

...

如何让它循环遍历每个找到的行并使用行数据单独的行数据发送自定义电子邮件?

最佳答案

在发送完所有电子邮件之前,请勿关闭传输程序。

var querystring1 = 'SELECT `date_created`,`first_name`,`last_name`,`email` FROM `users` WHERE TIMESTAMPDIFF(SECOND,date_created, NOW()) <=298 AND `email`!="" LIMIT 0,5';

connection.query(querystring1, function (err, row) { if (err) throw err; 
var toSend=[];
for (var i in row) { // Email content; change text to html to have html emails. 
toSend.push({//row[i].column name will pull relevant database info 
    to: row[i].email,
    from: '******@******',
    subject: 'Hi ' + row[i].first_name + ', Thanks for joining ******!',
    html:  {path:__dirname + '/templates/welcome.html'} 
 });
}

// Send emails
 async.eachSeries(toSend, function( sendit, callback) {
    transporter.sendMail(sendit,function(error,response){

        if (error) {
        callback(error);

         }else{
        console.log("Message sent1: " + sendit.to); callback();
         }
     )},function(err){if (err) throw (err); console.log("Finished")};
 });
});

关于javascript - node.js:循环,通过电子邮件发送查询中的每个匹配行,但它通过 # 匹配数向同一用户发送电子邮件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25412544/

相关文章:

javascript - 发生未捕获的异常时重新启动 Node.js 应用程序

javascript - 调用多个 Google Cloud Run 请求是否会调用容器的新实例

javascript - 在浏览器关闭时使用后台权限退出 Chrome 扩展程序

javascript - JavaScript 是 "dynamic"是什么意思?

javascript - knockout foreach 不工作

php - Ajax 和 PHP - 在不打印 Ajax 的情况下获取 Mysql 表

php - 如何使用 PHP 检查 URL 是否已存在于数据库中?

javascript - 如何比较 JavaScript 时间戳和数字?

mysql - 是否可以计算 mysql 列中存在的字母表中的字母数量?

javascript - node.js child_process.spawn 没有标准输出,除非 'inherit'