Contents
はじめに
Gmail API を叩いて取得したメール本文をデコードする方法を紹介します.
“Gmail API を叩いてメールを取得することはできたのだけどメール本文を取得できずに困っている” そんな人にぜひとも読んでもらいたい記事です.
メール本文を取得するには次の2ステップが必要です.
- メール本文を探す
=>message["payload"]["body"]["data"]
の値がメール本文である - メール本文をデコードする
=>gmail.decode(encoded)
で base64 形式でデコードする
それぞれ説明しますが,すでに何かしらのメールメッセージを取得している状態を前提として説明します. まだメールメッセージを取得していない方は #gmail の関連記事をお読みください.
参考書籍:
メール本文を探す
取得したメールメッセージは次のような json 形式で定義されていると思います.(REST Resource: users.messages)
{
"id": string,
"threadId": string,
"labelIds": [
string
],
"snippet": string,
"historyId": string,
"internalDate": string,
"payload": {
object (MessagePart)
},
"sizeEstimate": integer,
"raw": string
}
この中の MessagePart
は次のような json 形式になっています.(MessagePart)
{
"partId": string,
"mimeType": string,
"filename": string,
"headers": [
{
object (Header)
}
],
"body": {
object (MessagePartBody)
},
"parts": [
{
object (MessagePart)
}
]
}
そしてお目当てのメール本文は MessagePartBody
に次のような json 形式で定義されています.(Resource: MessagePartBody)
{
"attachmentId": string,
"size": integer,
"data": string
}
この json 形式の data
キーに紐つく値が探していたメール本文です.
この data
の値を出力させてみればわかりますが base64 形式でエンコードされた文字列となっています.
メール本文を json から抽出する方法は message["payload"]["body"]["data"]
にアクセスできれば何でも良いです.
筆者は自作関数 get_message_body(message)
を使ってメール本文を一行で抽出しています.
See https://gitlab.com/typememo/typememo_/-/blob/master/tools/gmail.py
def get_message_body(message):
"""Get message body."""
part = get_message_part(message)
body = part["body"]["data"]
return body
def get_message_part(message):
"""Get message part."""
message_part = message["payload"]
return message_part
メール本文をデコードする
ということでめでたくメール本文を見つけることができました. しかも base64 形式でエンコードされている文字列であるということもわかりました.
メール本文を base64 形式でデコードしてあげれば人が読める形式になります.
base64
ライブラリを使えば簡単にデコードすることができます.
筆者は base64
ライブラリを使った decode(encoded)
という関数をメール取得関数などと同じファイルに記述しています.
gmail.decode(encoded)
と書けば base64
形式でデコードされるようになっているので扱いやすいです.
See https://gitlab.com/typememo/typememo_/-/blob/master/tools/gmail.py
import base64
def decode(encoded):
"""Decode message body."""
decoded = base64.urlsafe_b64decode(encoded).decode()
return decoded
おわりに
Gmail API を叩いてメール本文を取得してデコードする方法についての解説記事でした.
参考になりましたでしょうか?
何か不明点などあれば Gitlab のイシューに書いていただけるとありがたいです.
この記事を気に入っていただけましたら,twitter などで #typememo
とハッシュタグをつけて呟いていただけるととても嬉しいです.
最後までお読みいただきありがとうございました.
お手紙 お待ちしております!
愛用品
- Xiser Pro Trainer
1日中踏み続けられる強靭なステッパーでおすすめです. - HHKB Professional 墨
x HHKB キートップセット 白
ボディは墨色キートップは白色なのでめちゃめちゃ目に優しいのでおすすめです. - Apple Magic Mouse 2
トラックパッドは指が攣りそうになりますけどマウスはその心配が無いのでおすすめです. - Apple MacMini
ミニマルでパワフルなデスクトップ PC なので個人的に大好きなのでおすすめです. - iiyama Display 27inch FullHD
鮮明すぎない画面で目も疲れにくいですし何より高さ調節できるのが最高なのでおすすめです. - KINTO UNITEA 550ml
500ml の大容量でこの綺麗なデザインは他にみたことがないのでおすすめです.