2017-02-14 162 views
1

我正在關注本教程Using OAuth 2.0 for Server to Server Applications。我正嘗試使用服務帳戶連接到Gmail API。Gmail API服務器到服務器應用程序(錯誤請求錯誤)

我結束了看起來像這樣的代碼:

from oauth2client.service_account import ServiceAccountCredentials 
from httplib2 import Http 
from apiclient.discovery import build 
import json 

scopes = ['https://www.googleapis.com/auth/gmail.readonly'] 

credentials = ServiceAccountCredentials.from_json_keyfile_name('******.json', scopes) 

http_auth = credentials.authorize(Http()) 
service = build('gmail', 'v1', http=http_auth) 
request = service.users().messages().list(userId='me') 
response = request.execute() 

print json.dumps(response, sort_keys=True, indent=2) 

然而,當我運行此代碼,我得到以下錯誤:

googleapiclient.errors.HttpError:https://www.googleapis.com/gmail/v1/users/me/messages?alt=json returned "Bad Request">

有人可以幫助我明白的地方這個錯誤來自哪裏?

回答

0

將服務帳戶視爲虛擬用戶。它有一個谷歌雲端帳戶的谷歌日曆帳戶。它對我的知識沒有什麼是有一個Gmail帳戶。

通常,當您使用服務帳戶請求數據時,您必須手動授予服務帳戶對該數據的訪問權限。在谷歌驅動器的情況下,您可以與服務帳戶共享一個文件夾,使其能夠訪問谷歌驅動器。 (你也可以上傳到它的驅動器賬戶,但這個問題超出了範圍)

無法授予其他用戶訪問您的Gmail帳戶,因此無法使用具有普通用戶的服務帳戶Gmail帳戶。

注意:如果這不是一個普通的用戶Gmail帳戶,並且實際上是一個基於google的域名,那麼您可以通過管理部分授予服務帳戶訪問該域上其他用戶的所有電子郵件的權限。

其他明智的,你需要看看使用Oauth2來訪問Gmail。

相關問題