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)