Как взаимодействовать с Gmail API - делегат пользователя - Python 3.7 - PullRequest
1 голос
/ 23 сентября 2019

Я пытаюсь написать приложение Python, которое просто добавляет пользователя в качестве делегата в почтовый ящик другого пользователя.

Я следую за API @ Документация по API Google - Users.settings.delegates: create

Однако я изо всех сил пытаюсь найти параметры для:

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

В настоящее время я пытался создать API с делегированным пользователем.Однако, похоже, что это не так, как я ожидал.Я надеюсь, что Google создаст адаптивный API для браузера, чтобы поддержать это.Однако я борюсь с кодом:

from googleapiclient import discovery
from oauth2client.service_account import ServiceAccountCredentials


def main(user_to_be_added, delegated_mailbox):
    service_account_credentials = ServiceAccountCredentials.from_json_keyfile_name('credentials/service_account.json')
    service_account_credentials = service_account_credentials.create_scoped('https://mail.google.com/ https://www.googleapis.com/auth/gmail.insert https://www.googleapis.com/auth/gmail.modify')
    service_account_credentials = service_account_credentials.create_delegated(user_to_be_added)

    service = discovery.build('gmail', 'v1', credentials=service_account_credentials)

    response = service.users().settings().delegates().create().execute(userId=delegated_mailbox)


if __name__ == '__main__':
    main('some_account_to_be_added@gmail.com', 'delegated_mailbox@gmail.com')

Я неправильно взаимодействую с этим API?Если так, как кто-то еще достиг этого?

Спасибо за ваше время.Иордания

1 Ответ

0 голосов
/ 24 сентября 2019

Рабочее решение:

from googleapiclient import discovery
from google.oauth2 import service_account


def _create_client(subject):
    credentials = service_account.Credentials
    credentials = credentials.from_service_account_file('credentials/service_account.json',
        scopes=['https://www.googleapis.com/auth/gmail.settings.sharing',
                'https://www.googleapis.com/auth/gmail.settings.basic'],
        subject=subject)
    service = discovery.build('gmail', 'v1', credentials=credentials)
    return service


def add_delegate_to_email(user_to_be_added, delegated_mailbox):
    service = _create_client(user_to_be_added)

    body = {
        "delegateEmail": delegated_mailbox,
        "verificationStatus": "accepted"
    }
    try:

        response = service.users().settings().delegates().create(userId='me', body=body).execute()
        print(response)

    except Exception as e:
        print('Exception: {}'.format(e))

Основная проблема: из oauth2client.service_account import ServiceAccountCredentials устарел, поскольку Google перешел в собственность с google-auth.

...