当前位置: 首页 > 知识库问答 >
问题:

为什么我不能使用NodeMailer发送邮件?

吴子昂
2023-03-14

下面是我为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 at smtpconnection._formaterror(E:\coding backup\brands\node_module\nodemailer\lib\smtp-connection\index.js:774:19)at smtpconnection._actionauthcomplete(E:\coding

共有1个答案

谭伟
2023-03-14

如果没有完整的oauth2身份验证,就很难使用Gmail进行身份验证。

我会建议您使用SendGrid这样的外部服务来发送生产事务电子邮件。

它甚至有一个不错的免费计划,如果你的应用程序不是巨大的,这不会是一个问题!:)

ps:尽量避免应用程序引导程序之外的“同步”方法,因为它会阻塞整个服务器(这里使用的是readdirsync)。

 类似资料:
  • 问题内容: 我正在使用从这里获取的这段代码: 我将我的gmail邮件帐户放在发件人和收款人中,但出现此错误: 问题答案: 您没有在计算机上运行SMTP服务器。 请参阅:无法建立连接,因为目标机器主动拒绝了它

  • 问题内容: 我正在尝试从servlet发送电子邮件。也不例外,但是我的帐户中没有收到电子邮件。我正在使用以下代码: } 我现在收到以下异常: 谁能告诉我为什么我没有收到电子邮件以及此代码有什么问题。提前致谢 问题答案: 阅读https://developers.google.com/appengine/docs/java/mail/overview 基本上停止在您的应用程序中包含任何JavaMai

  • 我试图通过节点邮件发送电子邮件,但无法发送电子邮件,并显示以下错误。 我使用的是nodemailer文档中所示的确切代码。 这是我正在使用的服务器端代码。 这在几天前运行良好,在其他邮件客户端和gmail上也运行良好,因此我认为这个问题可能与gmail帐户的任何安全设置有关。

  • 问题内容: 我已经在本地()设置了一个基本的NodeJS服务器(使用nodemailer模块),以便可以测试该服务器是否可以实际发送电子邮件。 如果我正确理解SMTP选项(如果我输入错了,请更正我),我可以尝试将服务器中的电子邮件 直接 发送到某人的电子邮件帐户, 或者 可以仍然使用Node.js来发送电子邮件,但是 通过实际的电子邮件帐户 (在本例中为我的个人Gmail帐户),即使用SMTP。此

  • 这是我用的密码。 早些时候,我把邮件发送到一个Gmail地址,所以“service”是“Gmail”,它工作得很好。 对于“office@company.ro”这样的地址,我应该传递什么作为“服务”?

  • 我已经创建了一个帐户与sendInBlue,并导入了nodemailer和nodemailer-sendinblue-transport到我的项目中,我正在尝试发送一个简单的确认电子邮件。下面的代码是我如何尝试安装的: 下面的代码是我的注册方法中负责发送确认邮件的一节: 当我运行我的程序时,注册过程成功,但抛出以下错误,而不是发送电子邮件: 错误:在数据库中找不到键(失败,401) 我读到他们的v