我正在编写一个小脚本来帮助我们的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上。
答案 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秒,当然也许重试循环更快。无论如何,我现在可以继续:) 谢谢你的所有答案。