【发布时间】:2014-10-14 06:33:02
【问题描述】:
我有一个运行良好的 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();}
)
}});
....
如何让它遍历找到的每个行并使用行数据单个行数据发送自定义电子邮件?
【问题讨论】:
-
您的日志消息可能总是会打印最后一条,因为在循环结束后调用 sendMail 回调并且 var i 定义在上层函数范围并保存最后一次迭代索引(javascript 没有块范围)。但是,仍然有可能将邮件发送给 4 个不同的个人
-
我是这么认为的,但是我遇到了一个奇怪的问题,即一些触发的电子邮件在发送给我进行测试时会以双倍的形式出现。我认为这是一个机器人(不),时区重叠(不),现在它是有道理的......它正在发送重复邮件,因为查询检测到两行,但跳过了第二个用户的行信息......它只是重复第一个。
标签: javascript mysql node.js email row