javascript API密钥不是以“SG”开头,SendGrid

q9yhzks0  于 2022-10-30  发布在  Java
关注(0)|答案(9)|浏览(178)

我尝试在我的Heroku NodeJS应用程序中设置SendGrid加载项。我创建了API密钥并将其设置为环境变量。
整个API密钥类似于:SG.实际值.bbb_cccccc
第一个设置我做了我设置整个键作为我的SENDGRID_API_KEY,我得到了这个错误:
API密钥不是以SG开头。
因此,我意识到了这个错误,取消了环境变量的设置,并再次将其设置为整个键的actualValue部分。
然而,我仍然得到同样的错误。我尝试再次做同样的事情或重新启动终端(实际上,整个笔记本电脑)。
这是我尝试从SendGrid设置页面运行的测试代码:

const sgMail = require('@sendgrid/mail');
sgMail.setApiKey(process.env.SENDGRID_API_KEY)
const msg = {
  to: 'test@example.com',
  from: 'test@example.com',
  subject: 'Sending with Twilio SendGrid is Fun',
  text: 'and easy to do anywhere, even with Node.js',
  html: '<strong>and easy to do anywhere, even with Node.js</strong>',
};
sgMail.send(msg);

我试着创建一个新的键并设置它,但我得到了同样的错误。我试着将它设置为整个键,但没有“.SG”或只是bbb_ccccc部分。提前感谢。

w1jd8yoj

w1jd8yoj1#

API密钥不是以SG开头。
表示SendGrid的API键应该SG.开头。因此,您没有正确设置环境变量。您需要检查它。只需使用console.log打印环境变量。或者,使用

$ heroku run bash -a mighty-river-12802

以启动应用的控制台,并使用printenv打印环境变量。

Running bash on ⬢ mighty-river-12802... up, run.1571 (Free)
~ $ printenv
TERM=xterm-256color
WEB_MEMORY=512
MEMORY_AVAILABLE=512
COLUMNS=367
DYNO=run.1571
PATH=/app/.heroku/node/bin:/app/.heroku/yarn/bin:/usr/local/bin:/usr/bin:/bin:/app/bin:/app/node_modules/.bin
WEB_CONCURRENCY=1
_=/usr/bin/printenv
PWD=/app
PS1=\[\033[01;34m\]\w\[\033[00m\] \[\033[01;32m\]$ \[\033[00m\]
NODE_ENV=production
LINES=49
TIMES=5
HOME=/app
SHLVL=2
PORT=6791
NODE_HOME=/app/.heroku/node

TIMES: 5环境变量是通过heroku配置变量设置的:

例如:
第一个
果然收到了邮件:

laawzig2

laawzig22#

你好如果你使用的是node js,请确保在需要sendgrid/nodemailer模块的文件中有require('dotenv').config()。如果没有它,sendgrid传输器将有一个未定义的值而不是api_key。

zz2j4svz

zz2j4svz3#

我使用的是SendGrids v3和dotenv v8.2,在Node.js SendGrid上设置了一个env文件SendGrid.env,里面有导出SENDGRID_API_KEY,我将文件重命名为.env,删除了导出,现在它可以工作了。
在我的sendEmail文件的顶部看起来像这样:

require('dotenv').config();
const sgMail = require('@sendgrid/mail');
const apiKey = `${process.env.SENDGRID_API_KEY}`;
console.log("SendGrid key ", apiKey);

我的.env文件看起来像这样:

SENDGRID_API_KEY='SG.{left blank}................0EmA'
ANOTHER_API_KEY='ANOTEHERKEY'
xfb7svmp

xfb7svmp4#

我把.env中的单引号改成了双引号。这样就修复了我的bug。下面是我的sendgrid.env文件的样子:

SENDGRID_API_KEY = "SG.oDXKOMdlT3-nCEQt........"
ckx4rj1h

ckx4rj1h5#

你需要在你的测试文件的开头加上require('dotenv').config();,否则它将无法找到你的密钥。

mqkwyuun

mqkwyuun6#

我有一个同样的问题,我删除了export关键字从.env文件,它为我工作

d8tt03nd

d8tt03nd7#

我在开发环境中运行我的代码时遇到了这个问题。我也在使用env-cmd包。我通过更改package.json文件来修复这个问题:

"dev": "env-cmd -f ./config/dev.env nodemon src/index.js"

更改为:

"dev": "env-cmd -f ./config/dev.env nodemon src/emails/account.js"
ssm49v7z

ssm49v7z8#

我在NestJS中也遇到了同样的问题,问题是我在NestJS中非常新,LOL。

SendGrid.setApiKey(this.configService.get<string>('SENDGRID_API_KEY'));

configureService使用变量的名称来获取值,我认为应该传递变量而不是名称

jqjz2hbq

jqjz2hbq9#

如果每次对环境变量(dev.env)进行设置时没有重新启动服务器,则可能会出现此问题。
例如,如果你把你的键从sendgrid或任何值在环境变量(dev.env),你应该重新启动服务器,在我的情况下,我也面临同样的问题,然后我把process.env.SENDGRID_API_KEYconsole.log和发现未定义的终端,所以在我的情况下,下一步做的是键入^c在终端,然后敲回车:

npm run dev

现在在终端中可以看到显示在终端中的密钥,希望位解决您的问题

相关问题