SendGrid: «Предоставленный грант авторизации недействителен, просрочен или отозван» - PullRequest
1 голос
/ 26 июня 2019

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

Я получаю ошибку:

java.io.IOException: запрос возвратил статус. Код 401Body: {"errors": [{"message": "Предоставленный грант авторизации недействителен, истек или отозван", "field": null, "help": NULL}]}

Чтение некоторых других сообщений с похожими проблемами кажется наиболее решаемым, потому что люди использовали идентификатор ключа API вместо ключа 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

Дайте мне знать, что вы думаете. Заранее спасибо!

1 Ответ

0 голосов
/ 22 июля 2019

Мои извинения.Я не знал, что "System.getenv" получит переменные среды.Я установил переменные среды, и проблема решена.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...