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

Posted

技术标签:

【中文标题】Nodemailer、Heroku、Gmail、无效登录 - 在本地工作【英文标题】:Nodemailer, Heroku, Gmail, invalid login - works locally 【发布时间】:2017-12-10 23:38:57 【问题描述】:

过去几周我一直遇到这个问题,它每次都在本地工作,但是一旦我将它部署到我的 heroku 服务器,它会给我一个invalid login 错误。我已进入该帐户并授予对安全性较低的应用程序的访问权限。并且凭据是正确的,并且每次都可以在本地主机上运行。有什么我遗漏的吗?

quickSendMail: function(routeBody, callback) 
//configuring the nodemailer for email notifications
  var smtpConfig = 
          host: 'smtp.gmail.com',
          port: 465,
          secure: true, // use SSL
          auth: 
              user: 'mysmtpemail123',
              pass: '******'
            
        ;

  var mailOptions = 
          from: 'SageStorm Site <mysmtpemail123@gmail.com>',
          to: ['my email'],
          subject: routeBody.subject,
          html: 'my message'
        ;

  var transporter = nodemailer.createTransport(smtpConfig);

  transporter.verify(function(error, success) 
        if (error) 
                console.log(error);
         else 
                console.log('server is ready to send emails');
          
        )
  transporter.sendMail(mailOptions, function(error, info) 
        if (error) 
              console.log(error);
              return callback(err, null);
         else 
              console.log('Message sent: ' + info.response);
              return callback(null, info);
          
        )
    

【问题讨论】:

您可以尝试使用不同的帐户甚至其他邮件服务的相同过程吗?也许 google 阻止了 heroku 的登录,因为它认为它可疑。 另外,为了便于使用,您可以在 heroku 中传递来自 process.env 的变量,因此测试不同的凭据会容易得多。看看这个devcenter.heroku.com/articles/… 【参考方案1】:

您可以允许机器使用此link 远程访问您的 gmail,但请记住,Google 会影响您的默认帐户(即使您与另一个帐户连接)。

简单的方法:使用incognito / private 窗口(没有连接谷歌帐户)并登录您的谷歌帐户,然后使用上面的链接。

如果这不起作用,请尝试将您的 nodemailer 更新到最新版本。

【讨论】:

运气不好。 Nodemailer 已更新至 6.7.0 版。 这对我有用。我在 Heroku 上使用 nodemailer 和 Gmail 的 dynos。单击提供的链接后,双方都可以使用 nodemailer 登录。【参考方案2】:

根据https://support.google.com/accounts/answer/6009563,转到https://accounts.google.com/b/0/DisplayUnlockCaptcha并允许访问并重试..

也根据 nodemailer (https://github.com/nodemailer/nodemailer#delivering-bulk-mail) 上的文档

我在使用 Gmail 时遇到问题 Gmail 要么运行良好,要么无法运行 工作。切换到替代服务可能更容易 而不是解决 Gmail 的问题。如果 Gmail 不适合您 那就别用了。

【讨论】:

卧底简单【参考方案3】:

我为这个问题设置了一个赏金,但是在查看了 Nodemailer 文档/Github 之后,似乎使用 Gmail 只会让人头疼。

根据Nodemailer docs...

"...Gmail 期望用户是实际用户而不是机器人,因此它会在每次登录尝试时运行大量启发式算法,并阻止任何看起来可疑的内容以保护用户免受帐户劫持尝试。

例如,如果您的服务器位于另一个地理位置,您可能会遇到麻烦——一切都在您的开发机器上正常工作,但消息在生产中被阻止。”

我相信第二件事是我的问题;我的 Nodemailer 在我的机器上运行没有问题,但是当我将应用程序推送到 Heroku 时立即失败。

至于修复,我唯一的修复是使用不同的电子邮件提供商。我尝试使用的所有电子邮件帐户都已获得完全授权,可以允许其他登录和不太安全的应用程序;我已经了解了 Google 提供的允许使用该帐户的所有方法,并且我完全相信 不可能通过 Nodemailer 和 Gmail 获得一致的结果

使用 Outlook/Hotmail 对我有用。我还尝试切换到其他 Gmail 帐户。它成功运行了几次,然后又回到了之前的状态。

【讨论】:

很有趣,直到现在我还在使用 Gmail,它对我来说非常好用【参考方案4】:

大多数情况下,当人们最终从 Nodemailer 收到这种错误时,Google 列出的这些选项之一可以修复它,请花点时间通过要使用的 google 帐户进行必要的设置。

Google 为我们提供了listed 的所有潜在问题和修复。只要你打开less secure apps setting。确保将这些应用到正确的帐户。

第 1 步:检查您的密码

如果您遇到这些问题或无法登录,请先检查以确保您使用的密码正确。

第 2 步:尝试这些故障排除步骤

如果您为自己的帐户启用了两步验证,则可能需要输入 App password 而不是常规密码。 通过https://mail.google.com 的网络版 Gmail 登录您的帐户。登录后,请尝试再次登录邮件应用。 访问 Display Unlock Captcha 并使用您的 Gmail 用户名和密码登录。如果被问到,请输入扭曲图片中的字母。 您的应用程序可能不支持最新的安全标准。尝试将一些设置更改为 allow less secure apps 访问您的帐户。 确保您的邮件应用程序未设置为过于频繁地检查新电子邮件。如果您的邮件应用每 10 分钟检查一次以上的新邮件,则可能会阻止该应用访问您的帐户。

【讨论】:

以上是关于Nodemailer、Heroku、Gmail、无效登录 - 在本地工作的主要内容,如果未能解决你的问题,请参考以下文章

Gmail、nodemailer、OATH2 刷新令牌不起作用

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

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

Nodemailer getaddrinfo ENOTFOUND 错误

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

mongodb nodemailer