gmail api 具有委派域访问权限的正确配置服务帐户的 http 连接失败
gmail api http connection fails for properly configured service account with delegated domain access
我正在尝试通过 python API 连接到我的 gmail 收件箱。
我有一个连接到目录 api 以执行用户维护操作的工作示例,它的设置和工作方式几乎与此代码相同。所以我已经为我的服务帐户用户完成了所有开发控制台和安全设置,他有一个邮箱,里面有一封测试电子邮件,等待我用这段代码阅读它。目前,我的问题是该行:
gmail_service = build('gmail', 'v1', http=http)
抛出:
File "./gmail_test.py", line 29, in <module>
gmail_service = build('gmail', 'v1', http=http)
NameError: name 'http' is not defined
不太确定我遗漏了什么,因为为 admin sdk 访问量身定制的几乎相同的东西效果很好。
无论如何,这是代码:
import urllib2
from httplib2 import Http
from googleapiclient.discovery import build
from oauth2client.client import SignedJwtAssertionCredentials
client_email = '<private>@developer.gserviceaccount.com'
with open("Unsubscribe Processing.p12") as f:
private_key = f.read()
creds = SignedJwtAssertionCredentials(
client_email,
private_key,
{
'https://www.googleapis.com/auth/gmail.readonly'
},
sub='serviceaccount@ourdomain.com')
auth = creds.authorize(Http())
gmail_service = build('gmail', 'v1', http=http)
results = gmail_service.users().labels().list(userId='serviceaccount@ourdomain.com').execute()
labels = results.get('labels', [])
if not labels:
print 'No labels found.'
else:
print 'Labels:'
for label in labels:
print label['name']
if __name__ == '__main__':
main()
你还没有定义变量 http
是什么。
来自 https://developers.google.com/gmail/api/auth/web-server,这似乎是您创建 Gmail 服务对象的方式:
http = httplib2.Http()
http = creds.authorize(http)
gmail_service = build('gmail', 'v1', http=http)
我正在尝试通过 python API 连接到我的 gmail 收件箱。 我有一个连接到目录 api 以执行用户维护操作的工作示例,它的设置和工作方式几乎与此代码相同。所以我已经为我的服务帐户用户完成了所有开发控制台和安全设置,他有一个邮箱,里面有一封测试电子邮件,等待我用这段代码阅读它。目前,我的问题是该行:
gmail_service = build('gmail', 'v1', http=http)
抛出:
File "./gmail_test.py", line 29, in <module>
gmail_service = build('gmail', 'v1', http=http)
NameError: name 'http' is not defined
不太确定我遗漏了什么,因为为 admin sdk 访问量身定制的几乎相同的东西效果很好。
无论如何,这是代码:
import urllib2
from httplib2 import Http
from googleapiclient.discovery import build
from oauth2client.client import SignedJwtAssertionCredentials
client_email = '<private>@developer.gserviceaccount.com'
with open("Unsubscribe Processing.p12") as f:
private_key = f.read()
creds = SignedJwtAssertionCredentials(
client_email,
private_key,
{
'https://www.googleapis.com/auth/gmail.readonly'
},
sub='serviceaccount@ourdomain.com')
auth = creds.authorize(Http())
gmail_service = build('gmail', 'v1', http=http)
results = gmail_service.users().labels().list(userId='serviceaccount@ourdomain.com').execute()
labels = results.get('labels', [])
if not labels:
print 'No labels found.'
else:
print 'Labels:'
for label in labels:
print label['name']
if __name__ == '__main__':
main()
你还没有定义变量 http
是什么。
来自 https://developers.google.com/gmail/api/auth/web-server,这似乎是您创建 Gmail 服务对象的方式:
http = httplib2.Http()
http = creds.authorize(http)
gmail_service = build('gmail', 'v1', http=http)