Javascript 使用Node.js中的nodeEmailer发送并发电子邮件

Javascript 使用Node.js中的nodeEmailer发送并发电子邮件,javascript,node.js,smtp,Javascript,Node.js,Smtp,当有人在我的网站上填写表单时,我试图发送验证电子邮件,我使用nodemailer实现了这一点 我的node.js代码如下所示: const express = require('express'); const app=express(); app.use(express.json()); app.post('/',(req,res)=>{ var nodemailer = require('nodemailer'); var transporter = nodemaile

当有人在我的网站上填写表单时,我试图发送验证电子邮件,我使用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...');
 });
 
const express=require('express');
常量app=express();
使用(express.json());
应用程序发布(“/”,(请求,回复)=>{
var nodeEmailer=require('nodeEmailer');
var transporter=nodeEmailer.createTransport({
主机:“smtp mail.outlook.com”,
安全连接:false,
港口:587,
tls:{
密码:'SSLv3',
拒绝:错误
},
认证:{
用户:'通用-email@outlook.com',
密码:“通用密码”
}
});
var mailpoptions={
来自:通用-email@outlook.com',
收件人:req.body.email\u name,
主题:"测试",,
文本:“测试”,
html:`测试`
};
transporter.sendMail(邮件选项,等待函数(错误,信息){
如果(错误)
{
console.log(错误);
返回res.json({stat:'notgood'});
}
console.log('发送的消息:'+信息响应);
返回res.json({stat:'all good'});
});
});
app.listen(3000,()=>{
log('在端口3000侦听…');
});
虽然它工作正常,但我怀疑如果多人发出相同的请求,它会给出
响应:“超过了Avast中的421并发连接限制(pass:0,processs:node.exe[46])
”错误

当我尝试循环代码并向自己发送300封电子邮件以测试每天电子邮件的限制时,我遇到了这个错误

当站点处于活动状态时,如何避免此错误

到目前为止,我提出了两种可能的解释:

  • 我可以循环代码,这样它会一直尝试发送电子邮件,直到有机会为止

  • 我将不得不使用outlook以外的其他服务


  • 在这种情况下我能做什么?我是否采取了正确的方法?我应该使用其他电子邮件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'});
      });
    });
    
    const express=require('express');
    const nodemailer=require('nodemailer');
    const transporter=nodemailer.createTransport({
    主机:“smtp mail.outlook.com”,
    安全连接:false,
    港口:587,
    tls:{
    密码:'SSLv3',
    拒绝:错误
    },
    认证:{
    用户:'通用-email@outlook.com',
    密码:“通用密码”
    }
    });
    常量app=express();
    使用(express.json());
    应用程序发布(“/”,(请求,回复)=>{
    var mailpoptions={
    来自:通用-email@outlook.com',
    收件人:req.body.email\u name,
    主题:"测试",,
    文本:“测试”,
    html:`测试`
    };
    transporter.sendMail(邮件选项,等待函数(错误,信息){
    如果(错误){
    console.log(错误);
    返回res.json({stat:'notgood'});
    }
    console.log('发送的消息:'+信息响应);
    返回res.json({stat:'all good'});
    });
    });
    
    就像一个符咒,但它能满足多个请求吗?例如,如果多人开始使用该网站,每个请求是否会同时发送,还是会排队并一次发送一个请求?它将同时发送outlook电子邮件可以处理多少并发连接?如果一次连接太多,我该如何处理?不确定它能处理多少连接,但如果连接太多,只需将
    pool:true,maxConnections:someNumber
    添加到
    createTransport
    配置中即可“如果使用共享,则NodeEmailer将保持固定数量的连接打开,并在连接可用时发送下一条消息。”请阅读-总结是,这不是向志愿者致辞的理想方式,可能会对获得答案产生反作用。请不要将此添加到您的问题中。