当我尝试使用Gmail API列出gmail线程时,我得到GoogleJsonResponseException:500内部服务器错误

时间:2015-01-05 15:10:44

标签: java google-api gmail-api

我正在尝试使用GMAIL API从我的电子邮件帐户下载附件,使用OAuth 2.0服务器到服务器应用程序。这是我的代码:

    private static final String USER = "MYACCOUNT@gmail.com";
    private static String emailAddress = "XXXXXXXX@developer.gserviceaccount.com";
    {
       try {
              httpTransport = GoogleNetHttpTransport.newTrustedTransport();
              credential = new GoogleCredential.Builder()
              .setTransport(httpTransport)
              .setJsonFactory(JSON_FACTORY)
              .setServiceAccountId(emailAddress)
              .setServiceAccountPrivateKeyFromP12File(new File("myfile.p12"))
              .setServiceAccountScopes(Collections.singleton(GmailScopes.GMAIL_READONLY))
              .build();
          }
          catch (IOException | GeneralSecurityException e)
          {
              throw new RuntimeException(e);
          }
    }
    // Create a new authorized Gmail API client
    Gmail service = new Gmail.Builder(httpTransport, JSON_FACTORY, credential)
        .setApplicationName(APP_NAME).build();

    // Retrieve a page of Threads
    ListThreadsResponse threadsResponse = service.users().threads().list(USER).execute();
      List<Thread> threads = threadsResponse.getThreads();

   // Print ID of each Thread.
    for (Thread thread : threads) {
      System.out.println("Thread ID: " + thread.getId());

}

我在threadsResponse调用时收到错误。这些是错误:

线程中的异常&#34; main&#34; com.google.api.client.googleapis.json.GoogleJsonResponseException:500内部服务器错误。

{   &#34;代码&#34; :500,   &#34;错误&#34; :[{     &#34;结构域&#34; :&#34;全球&#34;,     &#34;消息&#34; :&#34;后端错误&#34;,     &#34;理由&#34; :&#34; backendError&#34;   }],   &#34;消息&#34; :&#34;后端错误&#34; }     在com.google.api.client.googleapis.json.GoogleJsonResponseException.from(GoogleJsonResponseException.java:145)     在com.google.api.client.googleapis.services.json.AbstractGoogleJsonClientRequest.newExceptionOnError(AbstractGoogleJsonClientRequest.java:113)     在com.google.api.client.googleapis.services.json.AbstractGoogleJsonClientRequest.newExceptionOnError(AbstractGoogleJsonClientRequest.java:40)     在com.google.api.client.googleapis.services.AbstractGoogleClientRequest $ 1.interceptResponse(AbstractGoogleClientRequest.java:312)     在com.google.api.client.http.HttpRequest.execute(HttpRequest.java:1049)     在com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:410)     在com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:343)     在com.google.api.client.googleapis.services.AbstractGoogleClientRequest.execute(AbstractGoogleClientRequest.java:460)     在core.crescent.gmail.GmailApiQuickstart.main(GmailApiQuickstart.java:192)

2 个答案:

答案 0 :(得分:0)

您可以使用指数退避重试请求。为我工作。见https://developers.google.com/drive/web/handle-errors

答案 1 :(得分:0)

所以我找出了问题并修复了它!

设置“Credential”时(在我上面发布的代码中)。我需要添加.setServiceAccountUser(USER)子例程。通过执行此操作,您可以在创建的服务帐户和要访问的GMAIL帐户之间建立链接。 我之前在https://developers.google.com/accounts/docs/OAuth2ServiceAccount看过它,但我的印象是,只有您想要使用不同域名的帐户进行链接。

这解决了我的问题。谢谢大家的回复