質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

メール

メールは、コンピュータネットワークを利用し、 情報等を交換する手段のことです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

1161閲覧

GmailAPIを使用してPythonでメール情報を取得する

ino_way

総合スコア1

Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

メール

メールは、コンピュータネットワークを利用し、 情報等を交換する手段のことです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/04/25 10:00

前提・実現したいこと

GmailAPIを使用してPythonでメール情報を取得するシステムを作っています。
AttributeErrorの解決方法が不明です。
お忙しいところ恐縮ですがご教示いただきたくよろしくお願いいたします。

発生している問題・エラーメッセージ

AttributeError: 'GmailAPI' object has no attribute 'GetMessageList'

該当のソースコード

Python

1#https://qiita.com/orikei/items/73dc1ccc95d1872ab1cf #参考URL 2 3from __future__ import print_function 4from googleapiclient.discovery import build 5from httplib2 import Http 6from oauth2client import file, client, tools 7 8class GmailAPI: 9 def __init__(self): 10 # If modifying these scopes, delete the file token.json. 11 self._SCOPES = 'https://www.googleapis.com/auth/gmail.readonly' 12 13 def ConnectGmail(self): 14 store = file.Storage('C:\Users\name\Desktop\gmail\client_secret.json') 15 creds = store.get() 16 if not creds or creds.invalid: 17 flow = client.flow_from_clientsecrets('C:\Users\name\Desktop\gmail\credentials-gmail.json', self._SCOPES) 18 creds = tools.run_flow(flow, store) 19 service = build('gmail', 'v1', http=creds.authorize(Http())) 20 21 return service 22 23 24def GetMessageList(self,DateFrom,DateTo,MessageFrom): 25 26 #APIに接続 27 service = self.ConnectGmail() 28 29 MessageList = [] 30 31 query = '' 32 # 検索用クエリを指定する 33 if DateFrom != None and DateFrom !="": 34 query += 'after:' + DateFrom + ' ' 35 if DateTo != None and DateTo !="": 36 query += 'before:' + DateTo + ' ' 37 if MessageFrom != None and MessageFrom !="": 38 query += 'From:' + MessageFrom + ' ' 39 40 # メールIDの一覧を取得する(最大100件) 41 messageIDlist = service.users().messages().list(userId='me',maxResults=100,q=query).execute() 42 #該当するメールが存在しない場合は、処理中断 43 if messageIDlist['resultSizeEstimate'] == 0: 44 print("Message is not found") 45 return MessageList 46 #メッセージIDを元に、メールの詳細情報を取得 47 for message in messageIDlist['messages']: 48 row = {} 49 row['ID'] = message['id'] 50 MessageDetail = service.users().messages().get(userId='me',id=message['id']).execute() 51 for header in MessageDetail['payload']['headers']: 52 #日付、送信元、件名を取得する 53 if header['name'] == 'Date': 54 row['Date'] = header['value'] 55 elif header['name'] == 'From': 56 row['From'] = header['value'] 57 elif header['name'] == 'Subject': 58 row['Subject'] = header['value'] 59 MessageList.append(row) 60 return MessageList 61 62if __name__ == '__main__': 63 test = GmailAPI() 64 #パラメータは、任意の値を指定する 65 messages = test.GetMessageList(DateFrom='2018-01-01',DateTo='2021-02-01',MessageFrom='name@.com') 66 #結果を出力 67 for message in messages: 68 print(message)

補足情報(FW/ツールのバージョンなど)

Windows10 Python 3.8.5

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

def GetMessageList のインデントを下げてGmailAPIクラスのスコープ内に入れましょう。

diff

1class GmailAPI: 2 def __init__(self): 3 # If modifying these scopes, delete the file token.json. 4 self._SCOPES = 'https://www.googleapis.com/auth/gmail.readonly' 5 6 def ConnectGmail(self): 7 store = file.Storage('C:\Users\name\Desktop\gmail\client_secret.json') 8 creds = store.get() 9 if not creds or creds.invalid: 10 flow = client.flow_from_clientsecrets('C:\Users\name\Desktop\gmail\credentials-gmail.json', self._SCOPES) 11 creds = tools.run_flow(flow, store) 12 service = build('gmail', 'v1', http=creds.authorize(Http())) 13 14 return service 15 16 17-def GetMessageList(self,DateFrom,DateTo,MessageFrom): 18+ def GetMessageList(self,DateFrom,DateTo,MessageFrom):

投稿2021/04/25 10:04

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ino_way

2021/04/25 10:14

早速ご回答いただきありがとうございました。 ここのエラーはクリアできました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問