1

先月、私はGoogleの管理者が会社のドメイン内でGoogleのリソースを管理するためにさまざまなGoogle APIを幅広く使用するPythonのGAEアプリケーションの作業を終了しました。アプリは終了しました!!!しかし、今月Googleでは、現在実装しているEmailSettings APIはサポートされなくなり、メール設定はGmail APIに移行されると発表しました。これまでにいくつかの設定(すなわち、エイリアス、転送、バケーションレスポンダ、および署名)を移行しました。 Googleの移行ドキュメントでは、2つのAPIの主な違いと、移行方法に関する多少の曖昧さを指摘しています。とにかく、私は現在、サービスアカウントを使用してsend-as設定を変更するための新しいAPIを実装しようとしています。ここで(再び、これは、Pythonで)私はサービスアカウントのサービスを作成しています方法は次のとおりです。Gmail設定APIバックエンドエラー - Python

scopes = ['https://mail.google.com/', 'https://www.googleapis.com/auth/gmail.settings.basic', 'https://www.googleapis.com/auth/gmail.settings.sharing'] 

email = "[email protected]" 
credentials = oauth2.service_account.build_credentials(scope=scopes, user=me)  
http = httplib2.Http() 
credentials.authorize(http) 
service = google_api_helper.build("gmail", "v1", credentials)  
body = {'emailAddress':'[email protected]'} 

service_2.users().settings().updateAutoForwarding(userId="me", body=body).execute() 

この特定の例では、私は、自動転送の設定を更新しようとしていますが、それはいくつかのと同じシナリオとエラーになりますsend-asの設定私が抱えている問題は次のとおりです。 Googleが呼び出すような「繊細な設定」のためには、スコープ「https://www.googleapis.com/auth/gmail.settings.sharing」を使用する必要があります。そのためには、サービスアカウントを作成して機能させる必要があります。

私はサービスアカウントにドメイン全体のアクセスを認証していた場合、私はこのエラーを取得していますなぜ

HttpError: https://www.googleapis.com/gmail/v1/users/me/settings/autoForwarding?alt=json returned "Backend Error">

、これはAPIである:私はそれを使用しようとするたびに

は、私は500エラーメッセージが表示されますエラーまたはそれは私が現在oauth2認証を実装している方法ですか?更新oauth2clientライブラリを使用すると、ローカルのJSONファイル経由

credentials = GoogleCredentials.get_application_default() 
httpauth = credentials.authorize(Http()) 
service = build("gmail", "v1", http=http_auth) 
aliases_2 = service.users().settings().sendAs().list(userId="[email protected]").execute() 

credentials_new = ServiceAccountCredentials.from_json_keyfile_name("app/service_account_key.json", scopes) 
delegated_credentials = credentials_new.create_delegated(sub="[email protected]") 
http_auth = delegated_credentials.authorize(Http()) 
service = build("gmail", "v1", http=http_auth) 

時代遅れoauth2clientライブラリを使用し、使用して

は、アプリケーションのデフォルトの認証を使用する:私は成功せず、いくつかの実装を試してみましたSignedJwtAssertionCredentials関数は、ライブラリの新しい実装ではサポートされなくなりました。

credentials = SignedJwtAssertionCredentials(str(settings['oauth2_service_account']['client_email']).encode('utf-8'), settings['oauth2_service_account']['private_key'], scope=scopes, sub="[email protected]") 
auth2token = OAuth2TokenFromCredentials(credentials) 
# With this implementation i was able to provide the google admin account which is supposed to have super admin access to the "sub" parameter, this used to work for the EmailSettings API, but for this new implementation you need to pass the email of the user you are trying to gain access to. 
# build service 
# call API 

すべての3つの実装で基本的なスコープを呼び出すことができましたが、settings.sharingスコープの下で設定を変更しようとするたびに、バックエンドエラーメッセージが表示されました。これは私を狂って運転している、私はちょうどこのアプリを終了!アイデアがある場合、または以前にこの問題に遭遇した場合は、教えてください!!!!! ...

答えて

0

更新:2016-08-11現在、この問題は修正される予定です。

2016-07-27現在、特定のドメイン/ユーザーにしか影響しないように見えるが、このエラーに至るバグが承認バックエンドに存在する。私たちは修正に取り組んでいます。アップデートを入手するには、this issueにスターをください。

+0

エリック、あなたの応答をありがとう...私は3つの異なる認証方法を試みたので、私は多くを考え出しました。私はこの問題を詳しく見ていくつもりですが、Forwardingのアップデートではこのことだけを言及していますが、実際にはhttps://www.googleapis.com/authの範囲にあるすべてのサービス/リソースで発生します/gmail.settings.sharing;あなたがこれに取り組んでいるチームの一員であれば、その特定の範囲にあるリソースにチェックを入れてください。しかし、もう一度直接問題が認可の問題です...うまくいけば、すぐに解決策を見つけることができます。 – John

+0

この問題を解決する必要がある修正プログラムが昨日リリースされました。注:gmail.settings.sharingスコープを必要とするメソッドを使用するには、サービスアカウントでドメイン全体の委任を使用する必要があります。 –

+0

Eric、修正がロールアウトされた後、すぐに対応してくれてありがとう!私はその範囲に該当する必要な機能を実装し、他の関連する問題に直面しているかどうかを皆さんに知らせます。もちろん、これらの要件(ドメイン全体の委任を持つサービスアカウント)は既に満たしていますが、ヘッドアップの方々にはもう一度感謝しています。 – John

関連する問題