いいかげん日記

思いついたことをただひたすら書き殴るいいかげんな日記です。

【Gmail API × Python】APIを利用したメールの削除ができない

プログラミングにハマり始めてからというもの、Qiitaやはてなのみなさんにはお世話になりっぱなしです。

そこで、私もみなさんの真似して私が詰まったところについて記事にしてみます。
なにぶん、ド素人なので、間違いがあるかもしれませんが、そのときは指摘してもらえるとありがたいです。

使用したサンプルコード

  • APIにmessage idを投げて、メールを削除する。

  Users.messages: delete  |  Gmail API  |  Google Developers

  ※ Python3のシンタックスに修正

問題

コード内で、Full access権限を付与したはずなのに'Insufficient Permission'と怒られる。(選択できるAuth Scope:Choose Auth Scopes  |  Gmail API  |  Google Developers

SCOPES = 'https://mail.google.com/'


下記のページで付与された権限を確認すると、メールを削除する権限が付与されていない。
Sign in - Google Accounts

原因

権限を最初に付与したときに、下記のページにあるquickstart.pyのSCOPESを変更せずに実行したことが原因らしい。
Python Quickstart  |  Gmail API  |  Google Developers
サンプルコードの中身を見ると

SCOPES = 'https://www.googleapis.com/auth/gmail.readonly'

となっている。最初に上記の状態で実行してしまうと、後で動かすコードの中でSCOPESを変えても、データの取得権限しか付与されないみたい。

解決策

先程のページで「アクセス権の削除」をクリックし、一度該当するアプリに付与された権限を削除する。

その後、quickstart.pyのSCOPESを下記のように変更して実行する。

SCOPES = 'https://mail.google.com/'

gmailアカウントにログインして、アクセス権限を付与する。

これで無事にDeleteMessageが使えるようになった。

参考
PythonでGmailを使う(Google API)【動画付】 - SEO白書