微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么我无法使用 nodemailer 发送邮件?

如何解决为什么我无法使用 nodemailer 发送邮件?

下面是我的nodemailer函数-

function mailer(firstName,emailId,password){
    var transporter = nodemailer.createTransport({
        service: 'gmail',host: process.env.HOST,// hostname
        secureConnection: false,// TLS requires secureConnection to be false
        port: process.env.OUTLOOK_PORT,// port for secure SMTP
        tls: {
           ciphers:'SSLv3'
        },auth: {
          user: process.env.EMAILID,pass: process.env.PASSWORD
        }
      });
      
      var mailOptions = {
        from: process.env.EMAILID,to: emailId,subject: 'DM automation tool login details',text: 'Hi ' + firstName + ','
         + '\n\nThank you for registering.\nYou can Now login to the account using the password ' + password +
         '\nPlease click on the given link to login to your account http://localhost:8080/login' + 
         '\n\nNote : Please make sure to reset your password within an hour.'
      };
      
      transporter.sendMail(mailOptions,function(error,info){
        if (error) {
          console.log(error);
        } else {
          console.log('Email sent: ' + info.response);
        }
      });
    }

这里,我在 .env 文件中提供了电子邮件 ID 和密码,我正在使用下面的此功能。客户将从我的 ID 收到一封邮件到他的电子邮件 ID。

const createCustomer = async(req,res,next) => {
  try{ 
       
       var id = Math.floor(Math.random()*9000000) + 10000000;
       var db = req.con;
       const data = {
        "customerId" : id,"customerGroupId" : req.body.customerGroupId,"username" : req.body.username,"avatar" : req.file.filename,"email" : req.body.email,"password" : req.body.password,"mobileNumber" : req.body.mobileNumber,};
    console.log(data)

    const salt = await bcrypt.genSalt(20);
    data.password = await bcrypt.hash(data.password,salt);
    var pass = data.password;
    console.log(pass)
    
    if (!req.file.filename)
    return res.status(400).send('No files were uploaded.');

    let filename = fs.readdirsync('./src/template-store/temporaryImage/')
    console.log(filename)
    var file = req.files

    let result = db.query(`INSERT INTO customers set ?`,[data],function(err,rows){
   
        if(err){
            res.json({
                success:0,message:"An error occurred",err
            })
        }
        else{
            res.json({
                success:1,message:"Inserted",data: data
            })
             mailer(req.body.username,req.body.email,req.body.password)
        }
    })
    
}

  catch(error){
       res.json({
           message:"An error occured",error:error
       })
  }
}

密码正确。但我收到此错误-

错误:无效登录:534-5.7.9 需要特定于应用程序的密码。了解更多信息 534 5.7.9 https://support.google.com/mail/?p=InvalidSecondFactor f17sm10086327pfk.184 - gsmtp 在 SMTPConnection._formatError (E:\coding backup\Brands\node_modules\nodemailer\lib\smtp-connection\index.js:774:19) 在 SMTPConnection._actionAUTHComplete (E:\coding backup\Brands\node_modules\nodemailer\lib\smtp-connection\index.js:1513:34)

解决方法

如果没有完整的 gmail 身份验证,很难通过 OAuth2 进行身份验证。

我建议您使用 SendGrid 等外部​​服务来发送生产交易电子邮件。

它甚至有一个不错的免费计划,如果您的应用不是很大,那不会有问题! :)

PS:尽量避免应用程序引导程序之外的“同步”方法,因为它会阻塞整个服务器(您在此处使用 readdirSync)。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。