3

我正在使用 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

email settingsV2 的 api 名称和版本是什么?是否可以将其与服务帐户一起使用?问候

4

3 回答 3

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)
于 2014-11-28T13:39:53.497 回答
0

使用 Discovery API 似乎无法使用 emailsettings API。API 发现服务返回 API 的详细信息 - 可用的方法等。

请参阅 PHP 客户端 API 上提出的以下问题

https://github.com/google/google-api-php-client/issues/246

我不清楚为什么 emailsettings 不能通过发现 API 使用,或者是否有计划这样做。真的感觉很多这些系统和库都没有维护。

已弃用的 gdata 客户端库确实有支持。试试下面的例子,我可以确认它工作正常。

https://code.google.com/p/gdata-python-client/source/browse/samples/apps/emailsettings_example.py

于 2014-09-04T04:42:44.937 回答
0

如果您的应用中有多个入口点需要访问 EmailSettings API,这里有一个可重用的函数,它返回一个“客户端”对象:

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)
于 2015-05-04T20:33:12.960 回答