Как пройти аутентификацию с помощью API настроек электронной почты Google, используя служебную учетную запись Python-клиента oauth2?
Я использую Python 2.6 и клиентскую библиотеку для Google API, которую я пытаюсь использовать для получения аутентифицированного доступа к настройкам электронной почты:
f = file(SERVICE_ACCOUNT_PKCS12_FILE_PATH, 'rb')
key = f.read()
f.close()
credentials = client.SignedJwtAssertionCredentials(SERVICE_ACCOUNT_EMAIL, key, scope='https://apps-apis.google.com/a/feeds/emailsettings/2.0/', sub=user_email)
http = httplib2.Http()
http = credentials.authorize(http)
return discovery.build('email-settings', 'v2', http=http)
Когда я выполняю этот код, я получаю следующую ошибку: UnknownApiNameOrVersion: name: email-settings version: v2
Какое имя и версия API для настроек электронной почты V2? Можно ли использовать его с сервисной учетной записью? С уважением
3 ответа
Я нашел решение, чтобы получить настройки электронной почты, используя учетную запись службы oauth2: Вот пример:
SERVICE_ACCOUNT_EMAIL = ''
SERVICE_ACCOUNT_PKCS12_FILE_PATH = ''
EMAIL_SETTING_URI = "https://apps-apis.google.com/a/feeds/emailsettings/2.0/%s/%s/%s"
def fctEmailSettings():
user_email = "user@mail.com"
f = file(SERVICE_ACCOUNT_PKCS12_FILE_PATH, 'rb')
key = f.read()
f.close()
credentials = client.SignedJwtAssertionCredentials(SERVICE_ACCOUNT_EMAIL, key, scope='https://apps-apis.google.com/a/feeds/emailsettings/2.0/', sub=user_email)
auth2token = OAuth2TokenFromCredentials(credentials)
ESclient = EmailSettingsClient(domain='doamin.com')
auth2token.authorize(ESclient)
username = 'username'
setting='forwarding'
uri = ESclient.MakeEmailSettingsUri(username, setting)
entry = ESclient.get_entry(uri = uri, desired_class = GS.gdata.apps.emailsettings.data.EmailSettingsEntry)
Похоже, что API настроек электронной почты недоступен при использовании API обнаружения. Служба обнаружения API возвращает подробные сведения об API - какие методы доступны и т. Д.
Смотрите следующую проблему, поднятую в клиентском API PHP
https://github.com/google/google-api-php-client/issues/246
Мне неясно, почему настройки электронной почты недоступны через API обнаружения или есть ли планы сделать это. На самом деле кажется, что многие из этих систем и библиотек не обслуживаются.
Устаревшая клиентская библиотека gdata имеет поддержку. Попробуйте следующий пример, который я могу подтвердить, работает нормально.
https://code.google.com/p/gdata-python-client/source/browse/samples/apps/emailsettings_example.py
Если в вашем приложении есть несколько точек входа, которым требуется доступ к API EmailSettings, вот функция многократного использования, которая возвращает объект "клиент":
def google_get_emailsettings_credentials():
'''
Google's EmailSettings API is not yet service-based, so delegation data
has to be accessed differently from our other Google functions.
TODO: Refactor when API is updated.
'''
with open(settings.GOOGLE_PATH_TO_KEYFILE) as f:
private_key = f.read()
client = EmailSettingsClient(domain='example.com')
credentials = SignedJwtAssertionCredentials(
settings.GOOGLE_CLIENT_EMAIL,
private_key,
scope='https://apps-apis.google.com/a/feeds/emailsettings/2.0/',
sub=settings.GOOGLE_SUB_USER)
auth2token = gdata.gauth.OAuth2TokenFromCredentials(credentials)
auth2token.authorize(client)
return client
Затем его можно вызвать из другого места, например, чтобы связаться с DelegationFeed:
client = google_get_emailsettings_credentials()
uri = client.MakeEmailSettingsUri(username, 'delegation')
delegates_xml = client.get_entry(
uri=uri,
desired_class=gdata.apps.emailsettings.data.EmailSettingsDelegationFeed)