Node JS: Sendgrid Mail 403 'Forbidden' error
Asked Answered
B

8

33

I am sending a very straightforward email using Send grid in my node js project. But I get returned a 403 Forbidden error. The API Key has full access. The code is also correctly integrated, as I used another API Key from another account and it works perfectly.

Error log:

enter image description here

Any suggestions?

Balinese answered 10/4, 2020 at 21:45 Comment(2)
facing the same problem - I see the x-no-cors-reason header has a link to their docs, sendgrid.com/docs/for-developers/sending-email/cors, but it just says you cant use the sg api from the browser (duh)Ballman
@AlfredYoung performing single Single Sender Authentication' on your Sendgrid account, solves this issue.Balinese
F
55

The error exists as the email address in the "from" field in the message(in your nodejs code,, to be sent using sendgrid) is not verified by sendgrid. Only put that email address in the "from" field which is explicitely verified by sendgrid.

To verify your sender email address to be able to send emails, refer to the link below:-

https://sendgrid.com/docs/ui/sending-email/sender-verification

Hope this helps.

(There could be further issues regarding domain name, read the link properly, they have a warning regarding use of gmail.com addresses, you can ignore that)

Fayalite answered 14/6, 2020 at 16:23 Comment(4)
This should be the accepted answer, thank you!Pedaiah
How do you verify a "donotreply" email address, when the SendGrid wants to send a verificication email to an address that doesn't exist?Reinhart
I'm not sure that I can use this particular field for this pourpose, and forgive me if its not, but thank you so much! I was thinking it was about the encoding method I was using in the fields passed by the class...Vicky
This solve my issue. Unfortunately, the API response doesn't give any details.Blankenship
U
9

Pasting the entire ERROR here

ResponseError: Forbidden
    at node_modules/@sendgrid/client/src/classes/client.js:133:29
    at processTicksAndRejections (internal/process/task_queues.js:93:5) {
  code: 403,
  response: {
    headers: {
      server: 'nginx',
      date: 'Sat, 10 Oct 2020 17:22:02 GMT',
      'content-type': 'application/json',
      'content-length': '281',
      connection: 'close',
      'access-control-allow-origin': 'https://sendgrid.api-docs.io',
      'access-control-allow-methods': 'POST',
      'access-control-allow-headers': 'Authorization, Content-Type, On-behalf-of, x-sg-elas-acl',
      'access-control-max-age': '600',
      'x-no-cors-reason': 'https://sendgrid.com/docs/Classroom/Basics/API/cors.html'
    },

Here is the solution to further expand on what @Aman answered above.

  • You have to verify the email address you are sending from.

so meaning the from: address here

const msg = {
    to: '[email protected]',
    from: '[email protected]', //this is the address that needs to be verified by sendgrid
    subject: 'Sending from Sendgrid',
    text: 'here is the test from node',
    html: `<strong> Here is the order #${orderNumber} user: ${user} </strong>`,
}

Here is how to verify it https://sendgrid.com/docs/ui/sending-email/sender-verification/

See screenshot below:

enter image description here

Usurp answered 10/10, 2020 at 17:39 Comment(0)
I
5

Check whether from email address is used when you are verifying your send address.

Introgression answered 2/8, 2021 at 16:56 Comment(0)
L
4

I was having the same problem.
I discovered that the emails from of my application and the sender authentication of the SendGrid API need to be the same.

const sendMailHtml = async (subject, html) => {
    try {
        const msg = {
            to: '[email protected]',
            from: {
                email: "[email protected]"
            },
            subject: subject,
            html: html,
        }
        await sendgrid.send(msg)
    } catch (e) {
        return e
    }
}

sendgrid API email field

enter image description here

Lovel answered 15/4, 2021 at 2:5 Comment(1)
This solved my problem - thanks! Kept getting 403 despite having a verified sender on SendGrid. No idea why the example show: "from: 'string'" instead of what you suggested.Favorable
S
2

To fix this error you need go to perform SendGrid Sender Authentication for your sender email.

To do this, You need to login to your SendGrid Dashboard and visit Sender Authentication which is under the Settings dropdown.

There are 2 Types of Sender Authentication

  1. Domain Authentication // recommended
  2. Single Sender Verification

1 Domain Authentication
IF you allow SendGrid to authenticate your domain e.g. webapp.com
THEN you will be able to successfully send an email with your SendGrid API KEY if the email from key matches the verified domain from: *@webapp.com

2 Single Sender Authentication
This is another option where you verify a single email e.g. [email protected].
Which will then allow you to send out emails from: [email protected] via your SendGrid API KEY

Suckling answered 14/10, 2020 at 13:19 Comment(1)
The "from: *@webapp.com" part was what did it for meValet
N
0

In the latest release of sendgrid they have made the compulsion to verify the "Single Sender" i.e you as a single sender. So, to make it work the From field in your Sendgrid Send Email API should match the email you verified as a "single sender"

Nad answered 24/9, 2020 at 20:30 Comment(0)
B
0

verify your single sender account where Sender Authentication/Single Sender Verification/ action column (three-dot)(send verify email- edit -delete menu)

Brescia answered 26/9, 2020 at 21:31 Comment(0)
P
-3

[Tulio Faria] solved it by performing 'Single Sender Authentication' on his Sendgrid account.

I also had a similar issue not too long ago. What helped me fix this issue was to go to settings > API keys and then change the settings of the key I'm using to full-access. enter image description here

Penalize answered 12/4, 2020 at 7:30 Comment(4)
I'm facing the same problem. Changing the api key to full access does not solve it either.Grum
Tulio Faria i solved it by performing 'Single Sender Authentication' on my Sendgrid account. However, I have another account and I have not verified any domain or sender email, but I am still able to send an email from that account. And its mind boggling because I can specify ANY email address as the sender and the email is successfully delivered. Not sure what the real issue is.Balinese
@Sean C and "aledap" I tried with same to change access but still facing the same issue, it will give me 403 error.Airtight
@sean - this solution is overkill for what's really happening here, the error is because the from: '[email protected]', inside your msg object has not been confirmed/verified by Sendgrid just yetUsurp

© 2022 - 2024 — McMap. All rights reserved.