Sendgrid-nodejs: Предоставленная авторизация недействительна, истекла или отозвана (401)

Созданный на 1 сент. 2016  ·  15Комментарии  ·  Источник: sendgrid/sendgrid-nodejs

Резюме проблемы

При отправке электронного письма с помощью API Nodejs V3 я получаю следующее сообщение об ошибке:

{ 
    [SendGridError: Response error] message: 'Response error' } 
    { 
        statusCode: 401, 
        body: '{"errors":[{"message":"The provided authorization grant is invalid, expired, or revoked","field":null,"help":null}]}', 
        headers: { 
            server: 'nginx', 
            date: 'Wed, 31 Aug 2016 18:34:49 GMT', 
            'content-type': 'application/json', 
            'content-length': '116', 
            connection: 'close', 
            'x-frame-options': 'DENY'
        } 
    }
}

Это сообщение создается на экземпляре localhost, как в среде реального сервера.

Фрагмент кода

Для отправки электронного письма используется следующий код:

var helper = require('sendgrid').mail,
sg = require('sendgrid')(SENDGRID_API_KEY);

var from_email = new helper.Email('[email protected]');
var to_email = new helper.Email(myOwnEmail);
var subject = 'Subject';
var content = new helper.Content('text/plain', 'test');
var mail = new helper.Mail(from_email, subject, to_email, content);

var request = sg.emptyRequest({
    method: 'POST',
    path: '/v3/mail/send',
    body: mail.toJSON()
});

sg.API(request, function(err, response) {
    console.log(err, response);
    if (!err) {
        res.send({
            message: 'An email has been sent to the provided email with further instructions.'
        });
    } else {
        return res.status(400).send({
            message: 'Failure sending email'
        });
    }
});

Технические подробности:

  • локальный: Windows 10 x64
  • liveserver: Heroku
  • sendgrid-nodejs Версия: 4.0.2
  • версия npm: 3.7.5
  • версия узла: 4.4.5
help wanted question

Самый полезный комментарий

Я создал новую учетную запись с новым КЛЮЧОМ API с точно таким же кодом. Теперь я могу отправлять электронные письма, ожидая, что поддержка займет вечность.

Все 15 Комментарий

Привет @ ninox92 ,

Это означает, что возникла проблема с вашим ключом API.

Сначала проверьте значение SENGRID_API_KEY

Затем обратитесь в нашу службу поддержки по адресу https://support.sendgrid.com, чтобы они могли выяснить, что не так с разрешениями вашего ключа API.

Спасибо!

SENGRID_API_KEY был проверен и попробовал новый ключ API, но также воспроизвел то же сообщение об ошибке.

Используя запрос CURL POST для отправки электронного письма, я смог успешно отправить электронное письмо, используя тот же ключ API.

Попробую еще раз обратиться в службу поддержки.

В опубликованном вами коде есть SENGRID_API_KEY и я думаю, вы имели в виду SENDGRID_API_KEY

Спасибо, что указали на опечатку в имени переменной. Я это изменю. Тем не менее, переменная была правильно заполнена моим ключом API.

Я просто попробовал еще раз и не смог воспроизвести. Вот код, который я использовал:

var helper = require('sendgrid').mail;
var sg = require('sendgrid')(process.env.SENDGRID_API_KEY);

var from_email = new helper.Email('[email protected]');
var to_email = new helper.Email('[email protected]');
var subject = 'Subject';
var content = new helper.Content('text/plain', 'test');
var mail = new helper.Mail(from_email, subject, to_email, content);

var request = sg.emptyRequest({
  method: 'POST',
  path: '/v3/mail/send',
  body: mail.toJSON(),
});

sg.API(request, function(err, response) {
  console.log(response.statusCode);
  console.log(response.body);
  console.log(response.headers);
});

Не могли бы вы также предоставить запрос cURL, который работает на вас?

Я использовал следующее Hello, World! пример со страницы примеров локализации Sendgrid

curl --request POST \
  --url https://api.sendgrid.com/v3/mail/send \
  --header 'Authorization: Bearer SENDGRID_API_KEY' \
  --header 'Content-Type: application/json' \
  --data '{"personalizations": [{"to": [{"email": "<my-own-email>"}]}],"from": {"email": "[email protected]"},"subject": "Hello, World!","content": [{"type": "text/plain", "value": "Heya!"}]}'

Привет @ ninox92 ,

Вы пробовали использовать предоставленный мной образец кода?

Эта ошибка означает, что ваш ключ API не устанавливается должным образом.

Если вы не используете переменные среды, у вас будет:

var sg = require('sendgrid')('SG.XXXXXXXXXXXXXXXXXXX');

Я создал новую учетную запись с новым КЛЮЧОМ API с точно таким же кодом. Теперь я могу отправлять электронные письма, ожидая, что поддержка займет вечность.

Спасибо за продолжение, я рад, что вы в порядке! Сообщите нам, если у вас возникнут другие проблемы.

спасибо это мне очень помогло

привет, ребята, у меня проблема, это дало мне ту же ошибку, вот код, который я использую.

const express = require ('экспресс');
const приложение = экспресс ();

var sg = require ('sendgrid') (process.env.SENDGRID_API_KEY);

var port = process.env.PORT || 8080;

app.get ('/', function (req, res) {

var helper = require ('sendgrid'). mail;
var fromEmail = новый helper.Email ('[email protected] ');
var toEmail = новый helper.Email ('[email protected] ');
var subject = 'Hello World из библиотеки SendGrid Node.js!';
var content = new helper.Content ('text / plain', 'Здравствуйте, электронная почта!');
var mail = new helper.Mail (fromEmail, тема, toEmail, содержание);

var request = sg.emptyRequest ({
метод: 'POST',
путь: '/ v3 / mail / send',
тело: mail.toJSON ()
});

sg.API (запрос, функция (ошибка, ответ) {
if (error) {
console.log ('Получен ответ об ошибке');
}
console.log (response.statusCode);
console.log (response.body);
console.log (response.headers);
});

});

app.listen (порт, функция () {
console.log («Прослушивание: *» + порт);
});

и в моем файле .env.example
SENDGRID_API_KEY = код здесь / * у меня есть код API здесь * /

если вам нужно отправить электронное письмо через api с методом публикации, сделайте следующее:

var helper = require ('sendgrid'). mail;

router.post ('/', function (req, res) {

var sg=require('sendgrid')('your api key from your account');
var formEmail= new helper.Email('[email protected]');
var toEmail= new helper.Email(req.body.mail);
var subject='text';
var content = new helper.Content('text/plain', 'Your password has been successfully changed');

var mail = new helper.Mail(formEmail, subject, toEmail, content);

var request =sg.emptyRequest({
    method:'POST',
    path: '/v3/mail/send',
    body: mail.toJSON()
});

sg.API(request , function (error , response) {
    if(error){

        console.log('Error response not valid');

    }
});

})

module.exports = маршрутизатор;

Извините за проблемы, которые он работает сейчас, я подумал, что это ошибка, это ошибка 202. сожалею

Просто для тех, у кого такая же проблема, как и у меня. Если вы используете одну из клиентских библиотек SendGrid, убедитесь, что она обновлена!

Я использовал версию библиотеки C # 9.9.0 и внезапно начал получать эту ошибку. Я обновился до версии 9.10.0 и проблема устранилась.

Интересно, что у меня была точно такая же проблема с библиотекой C # Twilio, которую обновление разрешило без изменения кода. Просто совпадение с тем, что Twilio приобрела SendGrid?

В моем случае было следующее:

Моя IDE (Intellij CE 2020.10.3) не распознала мою переменную enviromet правильно, вместо того, чтобы получить значение моего ключа api sendgrid ej: SG.sddDDeq.qwt, он использовал путь к файлу .env, ej: «C: / Users / Me / MyProjectRootFolder / sendgrid.env "и предоставив его заголовкам запроса Sendgrid как" Авторизация ":" Bearer C: /Users/Me/MyProjectRootFolder/sendgrid.env: "какая проблема приводит к ошибке" Предоставленная авторизация грант недействителен ... ".

Так ... попробуйте отладить заголовки запросов и убедиться, что предоставленный ключ действителен (вы знаете свою переменную env), и вам также необходимо добавить проверку подлинности домена или проверку одного отправителя из панели инструментов SendGrid.

Надеюсь, это кому-нибудь поможет.

Была ли эта страница полезной?
0 / 5 - 0 рейтинги