javascriptnode.jsemailherokusendgrid

API Key does not start with "SG." SendGrid


I am trying to set up SendGrid add-on in my Heroku NodeJS app. I created the API Key and set it as an environment variable.

The whole API key looks something like: SG.actualValue.bbb_cccccc

The first setup I did I set the whole key as as my SENDGRID_API_KEY and I got this error:

API key does not start with SG.

So, I realized the mistake and unset the environment variable and set it again only to the actualValue part of the whole key.

However, I still get the same error. I tried doing the same thing again or restarting the terminal(actually, whole laptop).

This is the test code I am trying to run from the SendGrid setup page:

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);

I tried creating a new key and setting it, but I get the same error. I tried setting it to the whole key, but without ".SG" or just the bbb_ccccc part. Thank you in advance.


Solution

  • API key does not start with SG.

    means the API key of SendGrid should start with SG. So you didn't set the environment variables correctly. You need to check it. Just use console.log print the environment variables. Or, use

    $ heroku run bash -a mighty-river-12802
    

    to start a console for your app, and use printenv to print the environment variables.

    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 environment variable is set via heroku config vars:

    enter image description here

    E.g.

    const sgMail = require('@sendgrid/mail');
    
    sgMail.setApiKey(process.env.SENDGRID_API_KEY);
    const msg = {
      to: 'novaline.dulin@gmail.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)
      .then(() => console.log('send mail success'))
      .catch(console.log);
    
    $ export SENDGRID_API_KEY=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
    $ node index.js
    send mail success
    

    Received the email as expected:

    enter image description here