Nodemailer sendingRate 在本地工作,但仅在 Lambda 上发送指定数量的电子邮件
Nodemailer sendingRate works locally, but only sends the specified number of emails on Lambda
我的运输机是这样设置的:
const ses = new aws.SES();
var transporter = mailer.createTransport({
SES: ses,
sendingRate: 25
});
我有一个 sendEmail 函数,可以设置电子邮件来发送附件:
function sendEmail(body, filename, customer_name) {
var mailOptions = {
from: "test@test.com",
subject: "A test subject - " + customer_name,
html: '<p>' + customer_name + '</p><br />Please see attached file.',
to: "testing@testing.com",
attachments: [
{
filename: filename + ".txt",
content: body.toString()
}
]
};
return transporter.sendMail(mailOptions);
};
在 Lambda 中,我将 sendEmail 添加到 promise 数组中并这样处理:
module.exports.publish = async (event, context, callback) => {
...
var promises = data.map(async (i) => {
...
await sendEmail(data, file_prefix, customer_name);
};
await Promise.all(promises).then(() => {
addMessageToLog('Emails sent successfully');
});
await sendSNS(logger).then(() => {
if (isError) { callback(errorObj); }
callback(null, 'Emails successfully sent.');
});
我的问题是,当我使用 VS Code 中的无服务器框架在本地调用它时,我所有的电子邮件 运行 都非常好,看起来像指定的 25/秒速率。当我部署到 AWS Lambda 时,它只发送 25 封电子邮件,然后请求结束。在本地,它会向我的 SNS 主题发送我的日志消息,但不会在 Lambda 上发送。每次都在 25 突然结束。
在这种情况下,我是否正确使用了 sendingRate?为什么 AWS Lambda 会结束请求但不会在本地结束我的测试?
我会把它放在这里供后代使用,以防其他人遇到这个...
我将 maxConnections 设置为 1,这解决了我在 AWS 上的问题。
我的运输机是这样设置的:
const ses = new aws.SES();
var transporter = mailer.createTransport({
SES: ses,
sendingRate: 25
});
我有一个 sendEmail 函数,可以设置电子邮件来发送附件:
function sendEmail(body, filename, customer_name) {
var mailOptions = {
from: "test@test.com",
subject: "A test subject - " + customer_name,
html: '<p>' + customer_name + '</p><br />Please see attached file.',
to: "testing@testing.com",
attachments: [
{
filename: filename + ".txt",
content: body.toString()
}
]
};
return transporter.sendMail(mailOptions);
};
在 Lambda 中,我将 sendEmail 添加到 promise 数组中并这样处理:
module.exports.publish = async (event, context, callback) => {
...
var promises = data.map(async (i) => {
...
await sendEmail(data, file_prefix, customer_name);
};
await Promise.all(promises).then(() => {
addMessageToLog('Emails sent successfully');
});
await sendSNS(logger).then(() => {
if (isError) { callback(errorObj); }
callback(null, 'Emails successfully sent.');
});
我的问题是,当我使用 VS Code 中的无服务器框架在本地调用它时,我所有的电子邮件 运行 都非常好,看起来像指定的 25/秒速率。当我部署到 AWS Lambda 时,它只发送 25 封电子邮件,然后请求结束。在本地,它会向我的 SNS 主题发送我的日志消息,但不会在 Lambda 上发送。每次都在 25 突然结束。
在这种情况下,我是否正确使用了 sendingRate?为什么 AWS Lambda 会结束请求但不会在本地结束我的测试?
我会把它放在这里供后代使用,以防其他人遇到这个...
我将 maxConnections 设置为 1,这解决了我在 AWS 上的问题。