让 nodemailer 使用不同的 gmail 帐户发送电子邮件

Posted

技术标签:

【中文标题】让 nodemailer 使用不同的 gmail 帐户发送电子邮件【英文标题】:making nodemailer send emails with different gmail accounts 【发布时间】:2021-11-09 23:02:53 【问题描述】:

我成功通过passportjs 进行身份验证,但nodemailer 仅使用console.cloud.google 中使用的一封电子邮件发送电子邮件。

当我尝试其他 gmail 帐户时,我收到此错误:

错误:无效登录:535-5.7.8 不接受用户名和密码。 在 535 5.7.8 了解更多信息 https://support.google.com/mail/?p=BadCredentialsu6sm13346885wrp.0 - gsmtp 在 SMTPConnection._formatError (/var/www/html/Recrute/node_modules/nodemailer/lib/smtp-connection/index.js:784:19) 在 SMTPConnection._actionAUTHComplete (/var/www/html/Recrute/node_modules/nodemailer/lib/smtp-connection/index.js:1536:34) 在 SMTP 连接。 (/var/www/html/Recrute/node_modules/nodemailer/lib/smtp-connection/index.js:1515:26) 在 SMTPConnection._processResponse (/var/www/html/Recrute/node_modules/nodemailer/lib/smtp-connection/index.js:947:20) 在 SMTPConnection._onData (/var/www/html/Recrute/node_modules/nodemailer/lib/smtp-connection/index.js:749:14) 在 TLSSocket.SMTPConnection._onSocketData (/var/www/html/Recrute/node_modules/nodemailer/lib/smtp-connection/index.js:189:44) 在 TLSSocket.emit (events.js:376:20) 在 addChunk (internal/streams/readable.js:309:12) 在 readableAddChunk (internal/streams/readable.js:284:9) 在 TLSSocket.Readable.push (internal/streams/readable.js:223:10) code: 'EAUTH', response: '535-5.7.8 Username and Password not 公认。了解更多\n' + '535 5.7.8 https://support.google.com/mail/?p=BadCredentials u6sm13346885wrp.0 - gsmtp',响应代码:535,命令:'AUTH XOAUTH2'

我添加了所有的电子邮件来测试用户。

代码

      type: 'oauth2',
      user: req.user.email,
      clientId: clientId,
      clientSecret: clientSecret,
      refreshToken: refreshToken,
  ;
  
  var mailOptions = 
      from: req.user.email,
      to: 'email@gmail.com',
      subject: req.query.sbjct,
      text: req.query.msg,
      html: req.query.msg,
  ;
  
  var transporter = nodemailer.createTransport(
      service: 'gmail',
      auth: auth,
  );
  
  transporter.sendMail(mailOptions, (err, res) => 
      if (err) 
          return console.log(err);
       else 
          res.send('done !');
       ```

【问题讨论】:

您应该在您的 Gmail Id(hotter.io/docs/email-accounts/secure-app-gmail) 上启用“不太安全”,然后重试 问题是我避免这样做,我不想强​​迫用户这样做 【参考方案1】:

Gmail 不完全允许从第三方应用程序发送邮件。因此,要从第三方应用程序(例如使用 nodemailer 的应用程序)发送邮件,您需要转到该 gmail 帐户设置并降低该帐户的 gmail 安全性 [不太安全][1]。 nodemailer docs

你的 createTransport 应该是这样的

    let transporter = nodemailer.createTransport(
    host: "smtp.gmail.email",
    port: 587,
    secure: false, // true for 465, false for other ports
    auth: 
      user: your username, // generated gmail user
      pass: your password, // generated gmail password
    ,
  );

【讨论】:

以上是关于让 nodemailer 使用不同的 gmail 帐户发送电子邮件的主要内容,如果未能解决你的问题,请参考以下文章

带有 Gmail 服务的 Nodemailer 无法在 heroku 上运行

Nodemailer、Heroku、Gmail、无效登录 - 在本地工作

无法通过 nodemailer 发送电子邮件 |发件人“电子邮件 id@gmail.com>”无效

如何使用 gmail api 使用 nodemailer smtp oauth2?收到错误 535:不接受用户和通行证

在 nodemailer 中使用 o auth 的重要性

Nodemailer getaddrinfo ENOTFOUND 错误