Node.js使用Gmail SMTP无法发送电子邮件

26
我正在尝试使用 Gmail SMTP 发送电子邮件,但我收到以下错误信息:
我的电子邮件和密码都是正确的,我正在使用 nodemailer 发送邮件。
       var nodemailer = require('nodemailer');

                // create reusable transporter object using SMTP transport 
                var transporter = nodemailer.createTransport({
                    service: 'Gmail',
                    auth: {
                        admin: 'myuseremail.com',
                        pass: 'password'
                    }
                });

                var mailOptions = {
                    from: 'sender address', // sender address 
                    to: to, // list of receivers 
                    subject: 'Password Reset', // Subject line 
                    html: 'Your one time password is : <b>' + temporaryPassword + ' </b>' // html body 
                };

                transporter.sendMail(mailOptions, function (error, info) {
                    console.log(error,info);
              }

在日志中我遇到了这个错误:

    {
     [Error: Invalid login]
      code: 'EAUTH',
      response: '535-5.7.8 Username and Password not accepted. Learn more at\n535 5.7.8  https://support.google.com/mail/answer/14257 k5sm20957041pdo.48 - gsmtp',
      responseCode: 535
    } 

我尝试了一些链接,但都没用:
https://laracasts.com/discuss/channels/general-discussion/help-email-doesnt-get-sent-with-gmail-smtp
8个回答

52
var transporter = nodemailer.createTransport({
  service: 'Gmail',
  auth: {
    user: 'user@gmail.com',
    pass: 'password'
  }
});

尝试上述步骤,然后按照以下方法操作,这对我有效。

登录到https://www.google.com/settings/security/lesssecureapps打开较不安全的应用程序访问权限。

希望这对你也有用。

谢谢。


如果您启用了两步验证,则“较不安全的应用程序”功能将被禁用。您需要生成一个应用程序密码。要执行此操作,请按照以下步骤操作:https://support.google.com/accounts/answer/185833 - Ali Alwash
我遇到了相同的错误,而不安全应用程序提示是解决方案。顺便说一下,您也可以通过 smtp://email@gmail.com:password@smtp.gmail.com 登录。 - Sagar V

32

2

https://myaccount.google.com/lesssecureapps

点击此链接,在“您的不安全应用访问”中打开。这样,Gmail将向您的设备发送电子邮件,请确认是您本人操作。完成后,祝您编码愉快。

1
如果您正在使用OAuth2,且遇到上述问题,则按照下面所示的配置转换器,可以解决该问题。
const transporter = nodemailer.createTransport({
  host: 'smtp.gmail.com',
  port: 465,
  secure: true,
  auth: {
    type: 'OAuth2',
    user: process.env.MAIL_USER,
    clientId: process.env.GOOGLE_CLIENT_ID,
    clientSecret: process.env.GOOGLE_CLIENT_SECRET,
    refreshToken: process.env.GOOGLE_CLIENT_REFRESH_TOKEN
  }
});

那篇帖子中的链接已经失效了,请访问 https://thepandeysoni.org/2016/06/12/nodemailer-service-in-node.js-using-SMTP-and-xoauth2/。 - Kehinde Adedamola Shittu

1
Google不允许您直接发送电子邮件给他人。首先,您需要创建一个应用程序密码。请按照以下步骤完成此操作:
  1. 进入您的管理帐户部分。
  2. 然后单击左侧的安全链接。
  3. 在登录到 Google 中,单击应用程序密码,然后再次登录
  4. 它会询问“选择应用程序”,对于邮件目的,请选择邮件,然后从中选择要发送邮件的设备。
  5. 完成所有这些步骤后,它将为该事项生成密码并将其插入如下
    var smtpTransport = nodemailer.createTransport({
    service: "Gmail",
    auth: {
        user: "example@example.com",
        pass: "password"
    }

就是这样。


0
var transporter = nodemailer.createTransport({
  service: 'Gmail',
  auth: {
    user: 'user@gmail.com',
    pass: 'password'
  }
});

试试这个。


0

对我来说,secure:true 导致了 SSL 错误。 我将 secure:false 更改如下,并解决了问题。

let transporter = nodeMailer.createTransport({
    host: 'smtp.gmail.com',
    port: 587,
    secure: false,    //<<here
    auth: {
        user: 'example@gmail.com',
        pass:'your gmail pass'
    }
});

-1
let transporter = nodeMailer.createTransport({
    host: 'smtp.gmail.com',
    port: 587,
    secure: true,
    auth: {
        user: 'example@gmail.com',
        pass:'your gmail pass'
    }
});

1
虽然这似乎是一个解决方案,但最好提供一些解释为什么它可以解决问题。有一些没有经验的用户访问SO,可能不会立即理解这里的变革点在哪里。 - ElmoVanKielmo
它给我一个这样的错误: 错误:140528704497472:错误:140770FC:SSL例程:SSL23_GET_SERVER_HELLO:未知协议:../deps/openssl/openssl/ssl/s23_clnt.c:827: - srv_sud

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接