2015-08-13 28 views
0

我們一直使用電子郵件設置API來管理我們的用戶簽名,併爲Google Apps注入適當的HTML簽名。它直到最近才奏效。舊代碼使用具有管理員憑據的「ClientLogin」。我一直試圖使它與OAuth一起工作,現在ClientLogin已被完全刪除。使用OAuth2管理Google電子郵件設置

import gdata.apps.emailsettings.client,sys 
from oauth2client.client import SignedJwtAssertionCredentials 

SERVICE_ACCOUNT_EMAIL = '[email protected]' 

filename = sys.argv[1] 
username = sys.argv[2] 


f = file('key.pem', 'rb') 
key = f.read() 
f.close() 

credentials = SignedJwtAssertionCredentials(SERVICE_ACCOUNT_EMAIL, key, 
scope='https://apps-apis.google.com/a/feeds/emailsettings/2.0/', 
sub=username) 

auth2token = gdata.gauth.OAuth2TokenFromCredentials(credentials) 

emclient = gdata.apps.emailsettings.client.EmailSettingsClient(domain='companyname.com') 
auth2token.authorize(emclient) 

print filename 
print username 

f = open(filename, 'r') 
data = f.read() 
f.close 
emclient.UpdateSignature(username=username, signature=data) 

當我們運行它,我們得到:

oauth2client.client.AccessTokenRefreshError: unauthorized_client: Unauthorized client or scope in request. 

我經歷過的電子郵件設置API的文檔,並參考了要求從同意屏幕代碼的用戶,但提供零文檔,說明其中的任何一個應該如何工作,並且我寧願不必處理任何用戶交互。

我通過Developers控制檯激活了那裏的API,但它根本不存在。我嘗試激活Gmail(儘管它不同),但它沒有幫助。

我是OAuth2和Python的新手,所以也許我缺少一些明顯的東西。

回答

1

您的代碼是正確的。只要確保示波器(https://apps-apis.google.com/a/feeds/emailsettings/2.0/)的位置在https://admin.google.com/yourdomain.tld/ManageOauthClients

另外,請確保在API Console處檢查了AdminSDK API。

+0

太棒了,看起來像它的工作。錯過了將範圍添加到ManageOauthClients URL。我從來沒有在任何地方找到這個參考。奇怪。 此外,我必須將SignedJwtAssertionCredentials中的用戶名更改爲管理員用戶名,而不是我管理的用戶的用戶名。 – IdleGod

相關問題