【问题标题】:Nodejs nodemailer Username and Password not acceptedNodejs nodemailer用户名和密码不被接受
【发布时间】:2019-06-10 16:44:27
【问题描述】:

我正在尝试使用 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 了解更多信息 https://support.google.com/mail/?p=BadCredentialsp6sm97493129wrx.50 - gsmtp 在 SMTPConnection._formatError (C:\Users\Carlos\Desktop\Proyectos\nodeServer\node_modules\nodemailer\lib\smtp-connection\index.js:774:19) 在 SMTPConnection._actionAUTHComplete (C:\Users\Carlos\Desktop\Proyectos\nodeServer\node_modules\nodemailer\lib\smtp-connection\index.js:1509:34) 在 SMTPConnection._responseActions.push.str (C:\Users\Carlos\Desktop\Proyectos\nodeServer\node_modules\nodemailer\lib\smtp-connection\index.js:547:26) 在 SMTPConnection._processResponse (C:\Users\Carlos\Desktop\Proyectos\nodeServer\node_modules\nodemailer\lib\smtp-connection\index.js:933:20) 在 SMTPConnection._onData (C:\Users\Carlos\Desktop\Proyectos\nodeServer\node_modules\nodemailer\lib\smtp-connection\index.js:739:14) 在 TLSSocket._socket.on.chunk (C:\Users\Carlos\Desktop\Proyectos\nodeServer\node_modules\nodemailer\lib\smtp-connection\index.js:691:47) 在 TLSSocket.emit (events.js:182:13) 在 addChunk (_stream_readable.js:283:12) 在 readableAddChunk (_stream_readable.js:264:11) 在 TLSSocket.Readable.push (_stream_readable.js:219:10) 代码:'EAUTH',响应:'535-5.7.8 用户名和密码不被接受。 了解详情\n535 5.7.8 https://support.google.com/mail/?p=BadCredentialsp6sm97493129wrx.50 - gsmtp',响应代码:535,命令:'AUTH PLAIN' }

我已更改我的 gmail 帐户中有关“不太安全的应用程序”的相应参数。 我也尝试使用另一个非 gmail 帐户。 我试过这个:

service: 'gmail',

这个用于连接:

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

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

我做错了什么?

【问题讨论】:

  • 你试过secure: false吗?如果还是不行,试试secure: trueport: 587
  • 嗨,我有一个错误“错误:意外的套接字关闭”和“安全:假”和错误“{ [错误:16212:错误:1408F10B:SSL 例程:ssl3_get_record:错误的版本号: openssl\ssl\record\ssl3_record.c:252: ] 代码:'ECONNECTION',命令:'CONN' }",端口 = 587,安全 = true
  • 网络上的其他资源都提到要在此链接上执行该步骤:accounts.google.com/b/0/displayunlockcaptcha 恐怕在那之后我无法提供更多帮助。
  • 是的,我忘了提到我也尝试过解锁,但还是谢谢你

标签: node.js nodemailer


【解决方案1】:

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

  • 使用管理员帐户登录您的 Google 管理控制台。

  • 在管理控制台仪表板中,依次转到安全和基本设置(您可能需要点击底部的更多控件)。

  • 在安全性较低的应用下,选择转到安全性较低的应用的设置。

  • 在子窗口中,选择“允许所有用户访问安全性较低的应用”单选按钮。

【讨论】:

    【解决方案2】:
    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 });
        });
    

    注意:

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

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

    【讨论】:

    • 好吧,我不知道为什么,但是使用端口“port:25”它可以工作(也可以使用原始代码)。非常感谢(明确的答案和明确的定义)。
    • 我也遇到了这个问题。更改为端口 25 并没有为我解决问题。
    • 你能分享你的代码吗.. 所以我可以看看@Soubriquet
    • 我认为问题不在于 nodemailer 传输器配置,而在于 gmail 限制。在发送电子邮件之前,您应该允许非安全应用访问 gmail。我认为这就是问题所在。使用问题中描述的相同配置,我可以发送电子邮件。
    • 你好,我做了所有这些配置,我不允许任何安全应用程序,但它不起作用!
    猜你喜欢
    • 2022-08-12
    • 1970-01-01
    • 2022-01-01
    • 1970-01-01
    • 2016-05-22
    • 1970-01-01
    • 2015-01-10
    相关资源
    最近更新 更多