Sendgrid-nodejs: 提供的授权授权无效,已过期或已撤销(401)

创建于 2016-09-01  ·  15评论  ·  资料来源: sendgrid/sendgrid-nodejs

发行摘要

使用Nodejs V3 API发送电子邮件时,我收到以下错误消息:

{ 
    [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'
        } 
    }
}

该消息是在实时服务器环境中的本地主机实例上生成的。

程式码片段

以下代码用于发送电子邮件:

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 KEY创建了一个新帐户。 现在,我可以在等待支持的过程中永久发送电子邮件。

所有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示例页面上的

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 KEY创建了一个新帐户。 现在,我可以在等待支持的过程中永久发送电子邮件。

感谢您的跟进,很高兴您能正常运行! 如果您遇到其他任何问题,请告诉我们。

谢谢,对我有很大帮助

嗨,大家好,我遇到了麻烦,它给了我同样的错误,这是我使用的代码。

const express = require('express');
const app = express();

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

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

app.get('/',函数(req,res){

var helper = require('sendgrid')。mail;
var fromEmail = new helper.Email('[email protected]');
var toEmail = new helper.Email('[email protected]');
var subject ='来自SendGrid Node.js库的Hello World!';
var content = new helper.Content('text / plain','Hello,Email!');
var mail = new helper.Mail(fromEmail,subject,toEmail,content);

var request = sg.emptyRequest({
方法:“ POST”,
路径:“ / v3 / mail /发送”,
正文:mail.toJSON()
});

sg.API(请求,功能(错误,响应){
如果(错误){
console.log('收到错误响应');
}
console.log(response.statusCode);
console.log(response.body);
console.log(response.headers);
});

});

app.listen(port,function(){
console.log(“正在监听:*” +端口);
});

在我的.env.example文件中
SENDGRID_API_KEY =此处为代码/ *我这里具有API代码* /

如果您需要通过带有post methode的api发送电子邮件,则应该这样做:

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

router.post('/',功能(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)无法正确识别我的环境变量,而不是获取我的sendgrid api键值ej:SG.sddDDeq.qwt,它使用的是.env文件的路径,例如:“ C:/ Users / Me / MyProjectRootFolder / sendgrid.env”,并将其作为“授权”提供给Sendgrid请求标头:“ Bearer C:/Users/Me/MyProjectRootFolder/sendgrid.env:”这是导致错误“提供的授权”的问题。授予无效...”。

如此...尝试调试您的请求标头并验证提供的密钥是否有效(您可以识别环境变量),并且还需要从SendGrid仪表板添加域身份验证或单发件人验证。

希望这对某人有帮助。

此页面是否有帮助?
0 / 5 - 0 等级