bugfix> python > 投稿

特定のユーザーからメールを取得するためにGmail APIを実行しようとしています。 ただし、次のエラーが常に表示されます。 googleapiclient.errors.HttpError:https://www.googleapis.com/gmail/v1/users/me/settings/filters?alt=jsonが「不十分な権限」を返しました>

スコープの変更からGmail設定での安全性の低いアプリケーションの有効化まで、提案されたさまざまなオプションをすべて試しました。 最後のことは、私のコードが間違っている可能性があることです。

from __future__ import print_function
from googleapiclient import discovery
from googleapiclient.discovery import build
from httplib2 import Http
from oauth2client import file, client, tools
# Setup the Gmail API
SCOPES = 'https://mail.google.com/'
store = file.Storage('credentials.json')
creds = store.get()
if not creds or creds.invalid:
    flow = client.flow_from_clientsecrets('client_secret.json', SCOPES)
    creds = tools.run_flow(flow, store)
service = build('gmail', 'v1', http=creds.authorize(Http()))
# Call the Gmail API
    # results = service.users().labels().list(userId='me').execute()
    # labels = results.get('labels', [])
    # if not labels:
    #     print('No labels found.')
    # else:
    #     print('Labels:')
    #     for label in labels:
    #         print(label['name'])
label_id = 'mine' # ID of user label to add
filter = {
    'criteria': {
        'from': 'string@test.com'
    }#,
    #'action': {
        #'addLabelIds': [label_id],
        #'removeLabelIds': ['INBOX']
    #}
}
result = service.users().settings().filters().create(userId='me', body=filter).execute()
print ('Created filter: %s' % result.get('id'))

助けてくれませんか?

ありがとう

回答 2 件
  • このスクリプトを実行するフォルダーからcredentials.jsonファイルを削除し、SCOPES = ['https://www.googleapis.com/auth/gmail.send'、 'のような最終的なスコープのリストを使用してスクリプトを再実行するだけです。 https://www.googleapis.com/auth/gmail.labels ']。表示されるポップアップブラウザウィンドウで、目的のGmailアカウントのスコープのリストを承認します。その後、すべての設定が完了します。

    背景ストーリー:run_flow()が初めて実行されたときにポップアップしたブラウザー画面を介して、許可の少ないスコープ(読み取り専用など)を許可した可能性があります。これにより、スクリプトを実行したフォルダーにcredentials.jsonというファイルが作成されます。このcredentials.jsonは、上記のスクリプトごとに再生成されることはありません。初めてのスコープでフリーズします。好奇心のために、credentials.jsonを開いて読み取り、キー「スコープ」を検索できます。もちろん、このファイルにスコープを手動で追加して、新しいスコープが機能することを期待することはできません。これは、異なるスコープのセットがある場合は再生成する必要があります。

    無関係な注意事項:可能であれば、あまりにも寛容な範囲https://mail.google.com/を避けてください:)

  • を使用して作成されたJSONファイルを削除するだけですfile.Storage( 'credentials.json') SCOPESを変更または追加した後、プログラムが再度実行されます。

あなたの答え