GMail API使用Service用户管理标签

时间:2016-09-06 14:56:41

标签: google-oauth gmail-api google-authentication

我正在编写一个小脚本来帮助我们的pyhton支持者。我想为新用户创建几个标签,但我没有通过身份验证。

以下是代码的一些重要部分:

    delegated_credentials = self.credentials.create_delegated(self.p.mail)
    http = delegated_credentials.authorize(httplib2.Http())
    self.service_gmail = discovery.build('gmail', 'v1', http=http)

    for i in groupstoadd:
        print "| |-> {}".format(i)
        self.service_gmail.users().labels().create(userId=self.p.mail, body={"name": i}).execute()

所以self.credentials在代码中以相同的方式工作,有一个管理员帐户,所以我之前可以创建这个用户。但是当我尝试调用... labels()。创建时我得到了这个:

Error: (<class 'oauth2client.client.HttpAccessTokenRefreshError'>, HttpAccessTokenRefreshError(u'unauthorized_client: Unauthorized client or scope in request.',), <traceback object at 0x7f205667a9e0>)

如果我在委托中使用管理员电子邮件并创建它有用,这很有趣。那么问题是我是否必须以某种方式在新用户上启用GMAIL API? (肯定是域范围的API)

self.credentials部分:

   self.credentials = ServiceAccountCredentials.from_json_keyfile_name(CreateGA.CLIENT_SECRET_FILE, scopes=CreateGA.SCOPES)

范围是:

   SCOPES = [
                'https://www.googleapis.com/auth/admin.directory.user',
                'https://www.googleapis.com/auth/admin.directory.group',
                'https://www.googleapis.com/auth/admin.directory.user.security',
                'https://www.googleapis.com/auth/gmail.labels',
    ]

提前多多感谢! P上。

2 个答案:

答案 0 :(得分:0)

&#34; admin。*&#34;范围不适用于Gmail API,要使用API​​更新标签,您只需要gmail.labels范围。

要将Gmail API用于域范围的委派(支持人员可以访问域中的任何用户),您需要关注these docs on setting up Domain-wide delegation。特别是在域CPanel中将开发人员项目列入白名单,然后是&#34; JWT&#34; auth flow为每个用户创建一个auth令牌。然后使用该凭据根据API向Gmail用户发出请求。

答案 1 :(得分:0)

问题在于时间,看起来像GMail收件箱需要一些时间来创建用户后创建。我尝试了60秒,当然也许重试循环更快。无论如何,我现在可以继续:) 谢谢你的所有答案。