Неверный делегат для почтового ящика в Gmail API - PullRequest
0 голосов
/ 11 сентября 2018

Я пытаюсь получить делегатов для почтового ящика, используя Gmail API.Мое приложение работает на Google App-engine и имеет функцию добавления, удаления и получения делегатов с помощью API настройки электронной почты.Теперь я планирую перенести эти функции в Gmail API, так как API настройки электронной почты устареет.

В плане технологии я использую язык Java.Я выполнил все шаги, предусмотренные Gmail API документация .Аутентификация в Gmail API прошла успешно.Но когда я пытаюсь получить делегатов, выдается следующее сообщение об ошибке:

404 Not Found {"code": 404, "errors": [{"domain": "global","message": "Недопустимый делегат", "причина": "notFound"}], "message": "Недопустимый делегат"}

А внутри консоли ниже ошибка-

* com.google.api.client.googleapis.json.GoogleJsonResponseException: 404 не найдено {"код": 404, "ошибки": [{"домен": "глобальный"," message ":" Недопустимый делегат "," причина ":" notFound "}]," message ":" Недопустимый делегат "}

at com.google.api.client.googleapis.json.GoogleJsonResponseException.fro m (GoogleJsonResponseException.java:150) по адресу com.google.api.client.googleapis.services.json.AbstractGoogleJsonClie ntRequest.newExceptionOnError (AbstractGoogleJsonClientRequest.java:113) по адресу com.google.ooglej.isis.service.seri..AbstractGoogleJsonClie ntRequest.newExceptionOnError (AbstractGoogleJsonClientRequest.java:40) на com.google.api.client.googleapis.services.AbstractGoogleClientRequest $ 1.interceptResponse (AbstractGoogleClientRequest.java:321) на com.google.api.client.http.HttpRequest.execute (HttpRequest.java:1067.i.coogle).googleapis.services..AbstractGoogleClientRequest .execute (AbstractGoogleClientRequest.java:469) в com.aeegle.services.GmailService.retrieveEmailDelegates (GmailService.java: 106) в com.aeegle.DAOImpl.EmailDAOImpl.getDelegatesGmail (EmailDAOImpl.java:1 43) в controllers.DelegateController.getListDelegatesGmail (DelegateControll er.java:82) в sun.refmp.No.(Собственный метод) в sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl. Java: 62) в sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAcces sorImpl.java:43) methodd.java.lan498) на play.mvc.ActionInvoker.invokeWithContinuation (ActionInvoker.java:557) на play.mvc.ActionInvoker.invoke (ActionInvoker.java:508) на play.mvc.ActionInvoker.invokeControllerMethod (ActionInvoker.java:484 at)mvc.ActionInvoker.invokeControllerMethod (ActionInvoker.java:479) в play.mvc.ActionInvoker.invoke (ActionInvoker.java:161) в play.server.PlayHandler $ NettyInvocation.execute (PlayHandler.java:255) в игре.run (Invoker.java:278) в play.server.PlayHandler $ NettyInvocation.run (PlayHandler.java:233) в java.util.concurrent.Executors $ RunnableAdapter.call (Executors.java:51 1) в java.util.concurrent.FutureTask.run (FutureTask.java:266) в java.util.concurrent.ScheduledThreadPoolExecutor $ ScheduledFutureTuture.получить доступ к $ 201 (ScheduledThreadPoolExecutor.java:180) по адресу java.util.concurrent.ScheduledThreadPoolExecutor $ ScheduledFutureTask.выполнить (ScheduledThreadPoolExecutor.java:293) в java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor. java: 1149)в java.util.concurrent.ThreadPoolExecutor $ Worker.run (ThreadPoolExecutor .java: 624) в java.lang.Thread.run (Thread.java:748) *

Вы можете наблюдать номер строки GmailService106 есть проблема.Теперь я собираюсь опубликовать мой код Java.

1: - Код аутентификации -

  public Gmail getGmailService(String email) throws Exception {
        System.out.println("-------------getGmailService");

        HttpTransport httpTransport = new NetHttpTransport();
        JacksonFactory jsonFactory = new JacksonFactory();
        Collection<String> SCOPES = new ArrayList<String>();
        SCOPES.add(GmailScopes.GMAIL_SETTINGS_BASIC);
        SCOPES.add(GmailScopes.MAIL_GOOGLE_COM);
        SCOPES.add(GmailScopes.GMAIL_MODIFY);
        SCOPES.add(GmailScopes.GMAIL_READONLY);
        GoogleCredential credential;
        // To load classpath resources.
        ClassLoader classLoader = getClass().getClassLoader();  
        new File(SERVICE_ACCOUNT_PKCS12_FILE_PATH);
        credential = new GoogleCredential.Builder().setTransport(httpTransport).setJsonFactory(jsonFactory)
                .setServiceAccountId(SERVICE_ACCOUNT_EMAIL).setServiceAccountUser(email).setServiceAccountScopes(SCOPES)
                .setServiceAccountPrivateKeyFromP12File(new File(SERVICE_ACCOUNT_PKCS12_FILE_PATH)).build();
        System.out.println("----calling Builder");
        service = new Gmail.Builder(httpTransport, jsonFactory, null).setHttpRequestInitializer(credential)
                .setApplicationName(APPLICATION_NAME).build();

        return service;

    }

2: - Далее пытаюсь получитьделегаты для почтового ящика, использующие сервисный объект-

public Delegate retrieveEmailDelegates(String user, Gmail service) throws Exception {
        if (isBlankOrNullString(user)) {
            throw new IllegalArgumentException();
        }
        Delegate delegatesResponse=null;
        try {

            System.out.println("Call retrieveEmailDelegates for "+user);
             delegatesResponse = service.users().settings().delegates().get(user, "me").execute();
            System.out.println("-------service" + delegatesResponse.getDelegateEmail());

        } catch (Exception e) {
            e.printStackTrace();
            throw e;
        }
        return delegatesResponse;
    }

Пожалуйста, помогите мне в этом, так как я все еще запускаю это на моей машине localhost.

Ответы [ 2 ]

0 голосов
/ 12 сентября 2018

Отказ от ответственности: я работаю на Gmail и платформе Gmail API.

Похоже, вы пытаетесь получить список всех делегатов для учетной записи, поэтому вы должны использовать service.users().settings().delegates().list() вместо service.users().settings().delegates().get() ,

Обратите внимание, что это потребует дальнейших изменений в вашем коде, чтобы иметь дело с возвращенным ListDelegatesResponse.

Кроме того, вы получаете ошибку "Invalid delegate", поскольку service.users().settings().delegates().get(user, "me") предоставляет me в качестве электронного письма делегата, которого вы пытаетесь получить. Вам нужно будет указать действующий адрес электронной почты, чтобы запрос мог быть успешным. Однако я понимаю, что это, скорее всего, связано с тем, что вы ошибочно используете метод делегата Get вместо метода делегатов List.

0 голосов
/ 12 сентября 2018

Если вы хотите получить доступ к учетной записи электронной почты других пользователей, вы должны включить расслаивание почты, которое позволяет делегату читать, отправлять и удалять от его имени:

  1. Войдите в вашу консоль администратора Google .

    Примечание: Войдите, используя учетную запись администратора (не заканчивается на@ gmail.com).

  2. На домашней странице консоли администратора перейдите на Приложения > Gsuite > Gmail> Настройка пользователя .

  3. Рядом с Делегирование почты , выберите Разрешить пользователям делегировать доступ к своим почтовым ящикам другим пользователям в домене.
  4. (Необязательно) Выберите каждую организацию, в которой есть пользователи, для которых необходимо включить делегирование почты, и установите флажок Делегирование почты .
  5. Нажмите Сохранить .

После включения любой пользователь, который хочет назначить делегата для доступа к своей электронной почте, должен настроить делегирование почты в своей Gmail.счет.

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