2015 年 4 月 20 日,一些 Google Apps API 将被停用,包括 Provisioning API(gdata)。
在我的 Python 脚本中,我使用的是服务帐户和 OAuth 2.0,而不是 ClientLogin,以及替代 API:Directory API。
但是,我无法找到使用新 API 启用邮件转发的方法,并且 Google 的所有邮件转发 Python 文档都解释了如何使用 ClientLogin 来实现,该功能也将于 4 月 20 日停止使用。
相关信息:
我有一个服务帐户并按照本指南对其进行了适当的授权:https
://developers.google.com/api-client-library/python/auth/service-accounts
我的所有其他功能都在使用新的 API !
我已经彻底搜索了 Directory 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')
我根据 Jay Lee 的回答更新的代码:
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 错误。我已尝试重新启动我的服务器,以便再次创建凭据,但它没有帮助。当我尝试进行更新转发调用时发生错误。
我确认 access_token 与用于我的 Directory API 调用的那个相同,并且“客户端”实际上是一个 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 oauth2 工作流程的情况下授权 gdata 客户端?
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')