ウェブノウハウ

WEB KNOWHOW

Gmail APIでGmailの受信メールを一括取得&CSV化【Python】

5. ラベルを指定して受信メールの本文を一括取得する(ただし500件まで)

それでは、前項「Gmailから一括取得するメールリストのラベルIDを調べる」でメモしたラベルを指定してメールの本文を一括取得します。
ただし、Gmail APIの公式ドキュメントにもあるのですが、Gmail APIでは一度に取得できるメールは最大で500件とあります。
なので、仕方ないですがギリギリいっぱいの500件まで取得します。

まず関数を作ります。

※ 前項までのコードは記述した状態で、その下に書いていく処理だけをここでは紹介しますので、前項までのコードを用意してください。
 

#メール本文を500件取得する関数
def gmail_get_500messages_body(service, labelIdsValue):
    message_list = []

    # メッセージの一覧を取得
    messages = service.users().messages()
    msg_list = messages.list(userId='me', labelIds=labelIdsValue, maxResults=500).execute()
    
    # 各message内容確認
    for message_id in msg_list["messages"]:
        message = {}
        
        # 各メッセージ詳細
        msg = messages.get(userId='me', id=message_id['id']).execute()
        
            
        # 本文
        if(msg["payload"]["body"]["size"]!=0):
            decoded_bytes = base64.urlsafe_b64decode(
                msg["payload"]["body"]["data"])
            decoded_message = decoded_bytes.decode("UTF-8")
            message["body"] = decoded_message
        else:
            #メールによっては"parts"属性の中に本文がある場合もある
            decoded_bytes = base64.urlsafe_b64decode(
                msg["payload"]["parts"][0]["body"]["data"])
            decoded_message = decoded_bytes.decode("UTF-8")
            message["body"] = decoded_message

        message_list.append(message)
    
    return message_list

実行します。

messages = gmail_get_500messages_body(service, 'XXXXXX') # XXXXXX にはラベルのIDを入れる

※ ここで出てくるラベルIDの取得については、前項「4. Gmailから一括取得するメールリストのラベルIDを調べる」にあります。
 
中身を見てみましょう。

messages

ずらりと出てきます。
 
 
・・・でもなあ、500件までかあ・・・と思った方、ご安心ください。
次のページでは、500件以上のメールリストでも全件取得する方法をご紹介します。(なんだよ!)

では。

【100ウェブ新着情報メルマガ】

WordPressカスタマイズ事例やウェブ制作ノウハウの新着情報、お役立ち情報を
リアルタイムにメルマガ配信!