Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用GAE服务帐户的Gmail Java API_Java_Google App Engine_Google Oauth_Gmail Api_Service Accounts - Fatal编程技术网

使用GAE服务帐户的Gmail Java API

使用GAE服务帐户的Gmail Java API,java,google-app-engine,google-oauth,gmail-api,service-accounts,Java,Google App Engine,Google Oauth,Gmail Api,Service Accounts,我正在尝试使用GAE服务帐户阅读gmail消息。下面类似的代码可以很好地读取谷歌日历,但对于gmail来说失败了。我在域中只有一个用户(同时也是管理员帐户)。我正在尝试访问该用户的gmail)。任何关于我的代码失败原因的帮助都会很好 我已为以下范围授予了域范围的权限 Email (Read/Write/Send) https://mail.google.com/ https://www.googleapis.com/auth/admin.directory.user.readonly Cal

我正在尝试使用GAE服务帐户阅读gmail消息。下面类似的代码可以很好地读取谷歌日历,但对于gmail来说失败了。我在域中只有一个用户(同时也是管理员帐户)。我正在尝试访问该用户的gmail)。任何关于我的代码失败原因的帮助都会很好

我已为以下范围授予了域范围的权限

Email (Read/Write/Send)  https://mail.google.com/ 
https://www.googleapis.com/auth/admin.directory.user.readonly
Calendar (Read-Write)  https://www.googleapis.com/auth/calendar 
https://www.googleapis.com/auth/drive 
https://www.googleapis.com/auth/userinfo.email 
https://www.googleapis.com/auth/userinfo.profile
我在谷歌应用程序引擎中启用了以下API:

Admin SDK
Calendar API
Drive API
Gmail API
Google Cloud SQL
Google Cloud Storage
Google Cloud Storage JSON API 
下面是创建gmail服务的代码:

    // Create HTTP transport
    HttpTransport httpTransport = GoogleNetHttpTransport.newTrustedTransport();


    // Create JsonFactory using com.google.api.client.json.jackson2.JacksonFactory
    JsonFactory jsonFactory = new JacksonFactory();

    // Get service accont (contain service account email and P12 file name)
    BaseGoogleService.GoogleServiceAccount serviceAccount = getGoogleServiceAccount();

    //load private key from class path to File object.
    Resource resource = appContext.getResource("classpath:"+serviceAccount.getServiceAccountPrivateKeyFile());
    File privateKeyFile = resource.getFile();

    // Create Google credential for service account
    List<String> accountScopes = new ArrayList<String>();
    accountScopes.add(GmailScopes.MAIL_GOOGLE_COM);
    Credential credential = new GoogleCredential.Builder()
            .setTransport(httpTransport)
            .setJsonFactory(jsonFactory)
            .setServiceAccountId(serviceAccount.getServiceAccountId())
            .setServiceAccountScopes(accountScopes)
            .setServiceAccountPrivateKeyFromP12File(privateKeyFile)
            .build();

    // Create Gmail client

    Gmail gmailClient = new Gmail.Builder(httpTransport, jsonFactory, credential)
    .build();
当我执行这段代码时,我得到了下面的错误

com.google.api.client.googleapis.json.GoogleJsonResponseException: 500 OK
{
  "code" : 500,
  "errors" : [ {
   "domain" : "global",
   "message" : "Backend Error",
   "reason" : "backendError"
  } ],
  "message" : "Backend Error"
}
at com.google.api.client.googleapis.json.GoogleJsonResponseException.from(GoogleJsonResponseException.java:145)
at com.google.api.client.googleapis.services.json.AbstractGoogleJsonClientRequest.newExceptionOnError(AbstractGoogleJsonClientRequest.java:113)
at com.google.api.client.googleapis.services.json.AbstractGoogleJsonClientRequest.newExceptionOnError(AbstractGoogleJsonClientRequest.java:40)
at com.google.api.client.googleapis.services.AbstractGoogleClientRequest$1.interceptResponse(AbstractGoogleClientRequest.java:312)
at com.google.api.client.http.HttpRequest.execute(HttpRequest.java:1049)
at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:410)
at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:343)
at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.execute(AbstractGoogleClientRequest.java:460)

我能让它工作

两件事:

  • 在构建GoogleCredential时必须添加。userEmail表示要模拟的电子邮件id
  • 对于管理员帐户,无法执行此操作。我不得不向域名中添加一个用户并访问该用户的gmail

  • 我得到了它。两件事:1。在构建GoogleCredential时必须添加“.setServiceAccountUser(userEmail)”。2.对于管理员帐户,无法执行此操作。我不得不向域名中添加一个用户并访问该用户的gmail。
    com.google.api.client.googleapis.json.GoogleJsonResponseException: 500 OK
    {
      "code" : 500,
      "errors" : [ {
       "domain" : "global",
       "message" : "Backend Error",
       "reason" : "backendError"
      } ],
      "message" : "Backend Error"
    }
    at com.google.api.client.googleapis.json.GoogleJsonResponseException.from(GoogleJsonResponseException.java:145)
    at com.google.api.client.googleapis.services.json.AbstractGoogleJsonClientRequest.newExceptionOnError(AbstractGoogleJsonClientRequest.java:113)
    at com.google.api.client.googleapis.services.json.AbstractGoogleJsonClientRequest.newExceptionOnError(AbstractGoogleJsonClientRequest.java:40)
    at com.google.api.client.googleapis.services.AbstractGoogleClientRequest$1.interceptResponse(AbstractGoogleClientRequest.java:312)
    at com.google.api.client.http.HttpRequest.execute(HttpRequest.java:1049)
    at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:410)
    at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:343)
    at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.execute(AbstractGoogleClientRequest.java:460)