Javascript 节点电子邮件器OAuth2 2LO在Heroku部署中失败

Javascript 节点电子邮件器OAuth2 2LO在Heroku部署中失败,javascript,node.js,heroku,oauth-2.0,nodemailer,Javascript,Node.js,Heroku,Oauth 2.0,Nodemailer,这段代码在本地环境下可以发送电子邮件 我部署到heroku,但得到一个错误:error:无法生成令牌。检查您的身份验证选项 据我所知,heroku配置变量正确通过 谷歌对heroku服务器是否有某种IP限制?我是不是遗漏了什么 这是一个带有Google服务帐户的gSuite帐户 谢谢好的。我明白了,但把这个问题留在这里,以防有人犯了这个愚蠢的错误 这不是希罗库的问题。这是一个.env问题 显然,当作为env变量传递时,私钥中会出现一些中断。可能跟断线有关 对我有效的无果而终的解决方案: 使用.e

这段代码在本地环境下可以发送电子邮件

我部署到heroku,但得到一个错误:
error:无法生成令牌。检查您的身份验证选项

据我所知,heroku配置变量正确通过

谷歌对heroku服务器是否有某种IP限制?我是不是遗漏了什么

这是一个带有Google服务帐户的gSuite帐户


谢谢

好的。我明白了,但把这个问题留在这里,以防有人犯了这个愚蠢的错误

这不是希罗库的问题。这是一个.env问题

显然,当作为env变量传递时,私钥中会出现一些中断。可能跟断线有关

对我有效的无果而终的解决方案:

  • 使用.env文件时,请使用双引号:
    “----开始RSA私钥------…”
  • 对于heroku配置变量,这似乎不起作用。所以我把它包装在一个JSON字符串中。
    {“key”:“-----开始RSA私钥------….”}
    然后在应用程序中,
    JSON.parse(process.env.PRIVATE_key).key
  • 如果这对某人有任何帮助,你是非常受欢迎的

    const { 
        EMAIL_FROM,
        EMAILS_TO,
        USER,
        GMAIL_CLIENT_ID,
        GMAIL_PRIVATE_KEY
    } = process.env;
    let transporter = nodemailer.createTransport({
        host: 'smtp.gmail.com',
        port: 465,
        secure: true,
        auth: {
            type: 'OAuth2',
            user: USER,
            serviceClient: GMAIL_CLIENT_ID,
            privateKey: GMAIL_PRIVATE_KEY,
        }
    });