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

Nodejs nodemailer用户名和密码不被接受

叶华皓
2023-03-14

我试图用nodejs和nodemailer发送邮件,但这对我不起作用。我有以下代码:

const config = require('../../config');
const http = require('http');
const nodemailer = require('nodemailer');

module.exports = {

    sendMail: function (params) {
        return new Promise((resolve, reject) => {

            var transporter = nodemailer.createTransport({
                //service: 'gmail', //I tried with this too
                host: 'smtp.gmail.com',
                port: 465,
                secure: true,
                auth: {
                    user: params.fromMail,
                    pass: params.fromPass
                }
            });

            var mailOptions = {
                from: params.fromMail,
                to: params.toMailList,
                subject: params.subject,
                html: params.mailHtmlContent,
            };

            transporter.sendMail(mailOptions, function(err, info){
                if (err) {
                    reject(err);
                } else {
                    resolve(info.response);
                }
            });


        });
    }

};

我得到这个错误:

{错误:无效登录:535-5.7.8不接受用户名和密码。了解更多信息,请访问535 5.7.8_actionAUTHCompletep6sm97493129wrx.50-SMTPConnection的gsmtp。SMTPConnection的_formatError(C:\User\Carlos\Desktop\Proyectos\nodeServer\node_modules\nodemailer\lib\smtp-connect\node_modules: 19)。SMTPConnection的https://support.google.com/mail/?p=BadCredentials(C:\User\Carlos\Desktop\Proyectos\nodeServer\index.js:774\nodemailer\lib\smtp-connect\_responseA: 34)。SMTPConnection的index.js:1509node_modules(C:\User\Carlos\Desktop\Proyectos\nodeServer\ctions.push.str\nodemailer\lib\smtp-connect\_processResponse: 26)。SMTPConnection的index.js:547(C:\User\Carlos\Desktop\Proyectos\nodeServer\node_modules\lib\smtp-connect\index.js:933: 20)。_onData(C:\User\Carlos\Desktop\Proyectos\nodeServer\node_modules\nodemailTLSSocket上的readableAddChunk(_stream_readable.js:264: 11)。Readable.push(_stream_readable.js:219: 10)代码:“EAUTH”,响应:“535-5.7.8用户名和密码不被接受。在\n535 5.7.8https://support.google.com/mail/?p=BadCredentialsp6sm97493129wx.50-gsmtp'了解更多信息,响应代码:535,命令:“AUTH PLAIN”}

我已经更改了gmail帐户上关于“不太安全的应用程序”的对应参数。我也尝试了另一个非gmail帐户。我尝试了这个:

service: 'gmail',

连接如下:

host: 'smtp.gmail.com',
port: 465,
secure: true,

我阅读了stackoverflow中的所有“类似问题”,我不知道我是否还需要什么,或者我是否做了什么坏事。(当然,我已经修改了两个帐户中的用户名和密码,它们都可以)。

我在做什么坏事?

共有2个答案

丌官嘉福
2023-03-14

公认的答案对我不起作用。这四个步骤做到了:

>

从管理控制台仪表板,转到安全,然后转到基本设置(您可能需要单击底部的更多控件)。

在子窗口中,选择为所有用户启用对不太安全应用的访问单选按钮。

淳于博
2023-03-14
var nodemailer = require('nodemailer');

const transporter = nodemailer.createTransport({
  service: 'gmail',//smtp.gmail.com  //in place of service use host...
  secure: false,//true
  port: 25,//465
  auth: {
    user: 'example@gmail.com',
    pass: 'password'
  }, tls: {
    rejectUnauthorized: false
  }
});

transporter.sendEMail = function (mailRequest) {
  return new Promise(function (resolve, reject) {
    transporter.sendMail(mailRequest, (error, info) => {
      if (error) {
        reject(error);
      } else {
        resolve("The message was sent!");
      }
    });
  });
}

module.exports = transporter;

用法:

//import transporter JS file
const mail = require('../utils/mail');
let htmlContent = `
                <h1><strong>Contact Form</strong></h1>
                <p>Hi,</p>
                <p>${name} contacted with the following Details</p>
                <br/>
                <p>Email: ${email}</p>
                <p>Phone: ${phone}</p>
                <p>Company Name: ${companyName}</p>
                <p>Message: ${message}</p>
                `
    let mailOptions = {
        from: "Example <example@gmail.com>",
        to: "me@gmail.com",
        subject: "Mail Test",
        text: "",
        html: htmlContent
    }

mail.sendMail(mailOptions)
    .then(function (email) {
        res.status(200).json({ success: true, msg: 'Mail sent' });
    }).catch(function (exception) {
        res.status(200).json({ success: false, msg: exception });
    });

注:

>

  • 在使用gmail发送电子邮件之前,您必须允许非安全应用程序访问gmail,您可以通过转到gmail设置来执行此操作https://myaccount.google.com/lesssecureapps?pli=1

    同时启用验证码https://accounts.google.com/DisplayUnlockCaptcha

  •  类似资料:
    • 所以我有以下代码: 但当我尝试发送电子邮件时,它总是给出如下错误:错误:无效登录:535-5.7.8用户名和密码不被接受。在535 5.7.8了解更多信息https://support.google.com/mail/?p=BadCredentialsf67-v6sm75536287pfe。75-gsmtp 这是完整跟踪: 知道发生了什么以及如何解决这个问题吗?谢谢你。

    • 当我尝试使用JavaMail API发送邮件时,会出现以下错误:

    • 虽然使用modemailer发送邮件时只有少数帐户,但它工作正常,但对于某些帐户,即使凭据正确,它也会给出“无效登录:535-5.7.8用户名和密码不被接受。在535 5.7.8了解更多信息https://support.google.com/mail/?p=BadCredentials3sm51852778pfg。186-gsmtp“

    • 问题内容: Java 文件可以很容易地反编译。如果必须在代码中使用登录数据,如何保护数据库? 问题答案: 将机密帐户和密码硬编码到软件中非常方便-对于熟练的反向工程师。如果所有软件上的密码都相同,那么当不可避免地知道该密码时,每个客户都会受到攻击。而且由于它是硬编码的,因此修复起来非常痛苦。 你应将配置信息(包括密码)存储在应用程序启动时读取的单独文件中。这是防止密码因反编译而泄漏的唯一真实方法(

    • 当我尝试使用我的GMail帐户从我的PHP应用程序中使用SwiftMailer发送电子邮件时,出现以下错误。 这是我的SwiftMailer代码: 这是Apache错误日志和堆栈跟踪中的条目。 [Wed Aug18 22:06:10.284728 2015][: error][pid 9298][客户端10.0.0.1:64806]PHP致命错误:未捕获异常'Swift_TransportExce

    • 问题内容: 尝试使用JavaMail API发送邮件时收到此错误。我确定用户名和密码是100%正确的。我要连接的Gmail帐户是一个较旧的帐户,因为他们说使用新帐户需要一些时间。 这是我的代码: 问题答案: 给定的代码段可以在我的Gmail帐户上正常运行,因此此问题出在其他地方。您是否遵循错误消息中给出的链接?它包含以下提示: 确保您输入了完整的电子邮件地址(例如,username@gmail.c