SendGrid:“提供的授权授予无效,已过期或已撤销”

时间:2019-06-26 20:36:57

标签: java authorization sendgrid sendgrid-api-v3

我正在设置一个向客户端发送电子邮件的应用程序。我正在使用Java和SendGrid创建此应用,但是SendGrid授权存在问题

我遇到了错误:

java.io.IOException:请求返回状态代码401Body:{“错误”:[{“消息”:“所提供的授权授予无效,已过期或已撤销”,“字段”:空,“帮助”: null}]}

通读其他类似问题的文章,似乎大多数人都可以解决,因为人们使用的是API密钥ID而不是API密钥。我已经检查过以确保我使用的是完整密钥,所以我认为这不是问题。

我也曾尝试创建一个新的API密钥,但这只会带来相同的问题。最后,我尝试使用Postman进行类似的调用,并且使用相同的API密钥也可以正常工作。

这是我用来发送电子邮件的主要课程。


import com.sendgrid.*;
import com.sendgrid.helpers.mail.Mail;
import com.sendgrid.helpers.mail.objects.Content;
import com.sendgrid.helpers.mail.objects.Email;

import java.io.IOException;

public class SendEmail {

    public static void main(String[] args) throws IOException{
        Email from = new Email("FROM_EMAIL");
        String subject = "Sending with Twilio(?) is fun";
        Email to = new Email("TO_EMAIL");
        Content content = new Content("text/plain", "and easy to to anywhere, even with Java");
        Mail mail = new Mail(from, subject, to, content);

        SendGrid sg = new SendGrid(System.getenv("API_KEY"));
        Request request = new Request();

        try {
            request.setMethod(Method.POST);
            request.setEndpoint("mail/send");
            request.setBody(mail.build());
            Response response = sg.api(request);
            System.out.println(response.getStatusCode());
            System.out.println(response.getBody());
            System.out.println(response.getHeaders());
        } catch (IOException ex) {
            throw(ex);
        }

    }

然后我通过以下代码片段在我的主班上叫这个班:


    try{
            SendEmail.main(email);
    } catch(IOException ex){
            System.out.println(ex);
    }

“ email”字符串只是一个占位符,否则我会收到一条错误消息,说我在调用类时需要一个数组。 (不知道为什么会这样,这可能是问题的根源吗?)

明显的敏感信息已被删除,这就是为什么某些字段无法显示的原因。

顺便说一下,我遵循了这个github中的教程:

https://github.com/sendgrid/sendgrid-java

让我知道您的想法。 预先感谢!

2 个答案:

答案 0 :(得分:0)

抱歉。我不知道“ System.getenv”会得到环境变量。我设置了环境变量,问题就解决了。

答案 1 :(得分:0)

我认为您的环境变量设置不正确。尝试执行不带“ System.getenv”的程序,如下所示。

#include <stdio.h>
#include <stdlib.h>
typedef unsigned char uint8_t;
uint8_t Schedules[24][8]={
{0,1,1,1,1,1,1,0},
{0,2,2,2,2,2,2,0},
{0,3,3,3,3,3,3,0},
{0,4,4,4,4,4,4,0},
{0,5,5,5,5,5,5,0},
{0,6,6,6,6,6,6,0},
{0,7,7,7,7,7,7,0},
{0,8,8,8,8,8,8,0},
{0,9,9,9,9,9,9,0},
{0,10,10,10,10,10,10,0},
{0,11,11,11,11,11,11,0},
{0,12,12,12,12,12,12,0},
{0,13,13,13,13,13,13,0},
{0,14,14,14,14,14,14,0},
{0,15,15,15,15,15,15,0},
{0,16,16,16,16,16,16,0},
{0,17,17,17,17,17,17,0},
{0,18,18,18,18,18,18,0},
{0,19,19,19,19,19,19,0},
{0,20,20,20,20,20,20,0},
{0,21,21,21,21,21,21,0},
{0,22,22,22,22,22,22,0},
{0,23,23,23,23,23,23,0},
{0,24,24,24,24,24,24,0}
};

int main(){
    int this_hour,this_section,i;
    uint8_t buff[192]={0};//24*8
    for (this_hour=0;this_hour<24;this_hour++){
        for(this_section=0;this_section<8;this_section++)
        {
            buff[this_hour*8+this_section]=Schedules[this_hour][this_section];
        }
    }
    for(i=0;i<192;i++){

        if(i!=0 && i%8==0){
            printf("\n");
        }
        printf("%d",buff[i]);
    }

    printf("\n------------------------------------\n");


    uint8_t buff2[219]={0};//24*9+1+2
    for (this_hour=0;this_hour<24;this_hour++){
        for(this_section=0;this_section<8;this_section++)
        {
            buff2[this_hour*9+this_section+2]=Schedules[this_hour][this_section];
        }
    }
    for(i=0;i<219;i++){

        if(i!=0 && i%9==0){
            printf("\n");
        }
        printf("%d",buff2[i]);
    }





    return 0;
}