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 错误