在 Node.js 中使用 Nodemailer 发送并发电子邮件
Sending concurrent emails with Nodemailer in Node.js
当有人在我的网站上填写表格时,我正在尝试发送验证电子邮件,我正在使用 nodemailer 实现此目的。
我的 node.js 代码如下所示:
const express = require('express');
const app=express();
app.use(express.json());
app.post('/',(req,res)=>{
var nodemailer = require('nodemailer');
var transporter = nodemailer.createTransport({
host: "smtp-mail.outlook.com",
secureConnection: false,
port: 587,
tls: {
ciphers:'SSLv3',
rejectUnauthorized: false
},
auth: {
user: 'generic-email@outlook.com',
pass: 'generic-password'
}
});
var mailOptions = {
from: 'generic-email@outlook.com',
to: req.body.email_name,
subject: 'testing <No-Reply Email>',
text: 'testing',
html: `<div>testing</div>`
};
transporter.sendMail(mailOptions, await function(error, info){
if(error)
{
console.log(error);
return res.json({stat:'not good'});
}
console.log('Message sent: ' + info.response);
return res.json({stat:'all good'});
});
});
app.listen(3000,()=>{
console.log('Listening at Port 3000...');
});
虽然它工作正常,但我怀疑如果多个人提出相同的请求,那么它会给出 response: '421 concurrent connection limit in Avast exceeded(pass:0, processes:node.exe[46])
' 错误。
当我尝试循环代码并向自己发送 300 封电子邮件以测试每天的电子邮件限制时出现此错误
网站上线时如何避免此错误?
到目前为止,我提出了两种可能的解释:
我可以循环代码,使它不断尝试发送电子邮件,直到有机会
我将不得不使用 outlook 以外的一些其他服务
遇到这种情况我该怎么办?我采取的方法正确吗?我应该使用其他 Email API 服务吗?我对所有这些 SMTP 东西还很陌生。
我认为问题在于您正在为每个请求创建一个新连接,只需执行
const express = require('express');
const nodemailer = require('nodemailer');
const transporter = nodemailer.createTransport({
host: "smtp-mail.outlook.com",
secureConnection: false,
port: 587,
tls: {
ciphers:'SSLv3',
rejectUnauthorized: false
},
auth: {
user: 'generic-email@outlook.com',
pass: 'generic-password'
}
});
const app=express();
app.use(express.json());
app.post('/',(req,res)=>{
var mailOptions = {
from: 'generic-email@outlook.com',
to: req.body.email_name,
subject: 'testing <No-Reply Email>',
text: 'testing',
html: `<div>testing</div>`
};
transporter.sendMail(mailOptions, await function(error, info){
if(error) {
console.log(error);
return res.json({stat:'not good'});
}
console.log('Message sent: ' + info.response);
return res.json({stat:'all good'});
});
});
当有人在我的网站上填写表格时,我正在尝试发送验证电子邮件,我正在使用 nodemailer 实现此目的。
我的 node.js 代码如下所示:
const express = require('express');
const app=express();
app.use(express.json());
app.post('/',(req,res)=>{
var nodemailer = require('nodemailer');
var transporter = nodemailer.createTransport({
host: "smtp-mail.outlook.com",
secureConnection: false,
port: 587,
tls: {
ciphers:'SSLv3',
rejectUnauthorized: false
},
auth: {
user: 'generic-email@outlook.com',
pass: 'generic-password'
}
});
var mailOptions = {
from: 'generic-email@outlook.com',
to: req.body.email_name,
subject: 'testing <No-Reply Email>',
text: 'testing',
html: `<div>testing</div>`
};
transporter.sendMail(mailOptions, await function(error, info){
if(error)
{
console.log(error);
return res.json({stat:'not good'});
}
console.log('Message sent: ' + info.response);
return res.json({stat:'all good'});
});
});
app.listen(3000,()=>{
console.log('Listening at Port 3000...');
});
虽然它工作正常,但我怀疑如果多个人提出相同的请求,那么它会给出 response: '421 concurrent connection limit in Avast exceeded(pass:0, processes:node.exe[46])
' 错误。
当我尝试循环代码并向自己发送 300 封电子邮件以测试每天的电子邮件限制时出现此错误
网站上线时如何避免此错误?
到目前为止,我提出了两种可能的解释:
我可以循环代码,使它不断尝试发送电子邮件,直到有机会
我将不得不使用 outlook 以外的一些其他服务
遇到这种情况我该怎么办?我采取的方法正确吗?我应该使用其他 Email API 服务吗?我对所有这些 SMTP 东西还很陌生。
我认为问题在于您正在为每个请求创建一个新连接,只需执行
const express = require('express');
const nodemailer = require('nodemailer');
const transporter = nodemailer.createTransport({
host: "smtp-mail.outlook.com",
secureConnection: false,
port: 587,
tls: {
ciphers:'SSLv3',
rejectUnauthorized: false
},
auth: {
user: 'generic-email@outlook.com',
pass: 'generic-password'
}
});
const app=express();
app.use(express.json());
app.post('/',(req,res)=>{
var mailOptions = {
from: 'generic-email@outlook.com',
to: req.body.email_name,
subject: 'testing <No-Reply Email>',
text: 'testing',
html: `<div>testing</div>`
};
transporter.sendMail(mailOptions, await function(error, info){
if(error) {
console.log(error);
return res.json({stat:'not good'});
}
console.log('Message sent: ' + info.response);
return res.json({stat:'all good'});
});
});