Включить переадресацию почты с помощью учетной записи службы Google Apps

20 апреля 2015 года несколько API-интерфейсов Google Apps прекращены, включая API-интерфейс Provisioning API (gdata).
В моих сценариях Python я использую учетную запись службы и OAuth 2.0 вместо ClientLogin и API API API: API.
Тем не менее, я не могу найти способ включить пересылку почты с использованием нового API, и вся документация Google Python для пересылки почты объясняет, как это сделать, используя ClientLogin, который также прекращается 20 апреля.

Соответствующая информация:
У меня есть учетная запись службы и разрешено ее соответствующим образом следовать этому руководству: https://developers.google.com/api-client-library/python/auth/service-accounts
Все мои другие функции работают с новым API!
Я тщательно изучил документацию API каталога (хотя я не исключаю, что я что-то пропустил): https://developers.google.com/resources/api-libraries/documentation/admin/directory_v1/python/latest/ index.html
Единственная документация Google (которая была найдена мной) о реализации пересылки почты с Python предлагает использовать ClientLogin, как указано выше: https://developers.google.com/admin-sdk/email-settings/#manage_forwarding_settings

Мой существующий рабочий код для пересылки почты (на основе этой документации):

client = gdata.apps.emailsettings.client.EmailSettingsClient(domain='mydomain.co') client.ClientLogin(email=adminEmail, password=adminPass, source='apps') client.UpdateForwarding(username=username, enable=True, forward_to=forwardTo, action='ARCHIVE') 

Мой обновленный код, основанный на ответе Джея Ли:

 credentials = SignedJwtAssertionCredentials(serviceEmail, key, sub=adminEmail, scope='https://apps-apis.google.com/a/feeds/emailsettings/2.0/ '+'other scopes') client = gdata.apps.emailsettings.client.EmailSettingsClient(domain='mydomain.co') client.additional_headers = {'Authorization': 'Bearer %s' % credentials.access_token} client.UpdateForwarding(username=username, enable=True, forward_to=forwardTo, action='ARCHIVE') 

И я добавил новую область в свою учетную запись службы:
Консоль администратора-> Безопасность-> Дополнительные параметры-> Управление клиентским доступом API (в разделе «Аутентификация»)
* Примечание. Если вы используете другие области, вам нужно набрать их все, потому что они заменяют ваши предыдущие настройки.

Обновить:
Я думал, что это работает, но у меня, возможно, была строка, прокомментированная или проигнорированная. Когда я попробовал свой код позже в тот же день, когда вся строка была выполнена правильно, она все равно давала мне gdata.client.Unauthorized error. Я попытался перезагрузить свой сервер, чтобы учетные данные были созданы снова, но это не помогло. Ошибка возникает, когда я пытаюсь выполнить переадресацию обновления.
Я подтвердил, что access_token такой же, как тот, который работает для вызовов API-интерфейса Directory, и что «клиент» фактически является объектом emailSettingsClient.
Полная ошибка, которую я получаю:

Неавторизованное сообщение об ошибке

Другая попытка, основанная на следующем:
http://www.worldofchris.com/blog/2012/12/27/fun-with-oauth-gdata-google-apis-client-library-python/
https://groups.google.com/forum/m/#!msg/google-apps-developer-blog/1pGRCivuSUI/3EAIioKp0-wJ Как мне разрешить клиент gdata без использования рабочего процесса gdata oauth2?

 credentials = SignedJwtAssertionCredentials(serviceEmail, key, sub=adminEmail, scope='https://apps-apis.google.com/a/feeds/emailsettings/2.0/ '+'other scopes') auth = gdata.gauth.OAuth2Token(serviceEmail, key, scope='https://apps-apis.google.com/a/feeds/emailsettings/2.0/', access_token=credentials.access_token, refresh_token=credentials.refresh_token, user_agent='emailsettings/2.0')#I do not really understand this param client = gdata.apps.emailsettings.client.EmailSettingsClient(domain='mydomain.co') #Also tried with (domain='mydomain.co', auth_token = credentials.access_token) client.additional_headers = {'Authorization': 'Bearer %s' % credentials.access_token} auth.authorize(client) client.UpdateForwarding(username=username, enable=True, forward_to=forwardTo, action='ARCHIVE') 

    2 Solutions collect form web for “Включить переадресацию почты с помощью учетной записи службы Google Apps”

    Это должен быть правильный способ непосредственного использования объекта учетных данных:

     import gdata.gauth credentials = SignedJwtAssertionCredentials(serviceEmail, key, sub=adminEmail, scope=scopes) client = gdata.apps.emailsettings.client.EmailSettingsClient(domain='mydomain.co') client.auth_token = gdata.gauth.OAuth2TokenFromCredentials(credentials) client.UpdateForwarding(username=username, enable=True, forward_to=forwardTo, action='ARCHIVE') к import gdata.gauth credentials = SignedJwtAssertionCredentials(serviceEmail, key, sub=adminEmail, scope=scopes) client = gdata.apps.emailsettings.client.EmailSettingsClient(domain='mydomain.co') client.auth_token = gdata.gauth.OAuth2TokenFromCredentials(credentials) client.UpdateForwarding(username=username, enable=True, forward_to=forwardTo, action='ARCHIVE') 

    Мне нужно было перейти к моему последнему обновлению, чтобы мой код работал: мне нужно было использовать user_agent=credentials.user_agent , удалить client.additional_headers , и я использовал client_id и client_secret из учетных данных вместо их передачи (не уверен, что это проблема с переменным типом).
    Окончательный рабочий код:

     credentials = SignedJwtAssertionCredentials(serviceEmail, key, sub=adminEmail, scope='https://apps-apis.google.com/a/feeds/emailsettings/2.0/ '+'other scopes') auth = gdata.gauth.OAuth2Token( credentials.client_id,#serviceEmail credentials.client_secret,#private key scope='https://apps-apis.google.com/a/feeds/emailsettings/2.0/', access_token=credentials.access_token, refresh_token=credentials.refresh_token, user_agent=credentials.user_agent) client = gdata.apps.emailsettings.client.EmailSettingsClient(domain='mydomain.co') auth.authorize(client) client.UpdateForwarding(username=username, enable=True, forward_to=forwardTo, action='ARCHIVE') 
    Python - лучший язык программирования в мире.