【Golang】Gmail API メール本文のデコード

以前できなくて悩んでいた所が最近再度見てみたらサクッと解決できたのでメモ。

結論

base64パッケージのStdEncodingではなくURLEncodingを使えばOK。
以前はStdEncodingを使って、うまくできない、途中で途切れてしまう〜と悩んでいました。
以下の感じで取れます。

message, err := srv.Users.Messages.Get(user, m.Id).Format("full").Do()
message, err := srv.Users.Messages.Get(user, m.Id).Format("full").Do()
if err != nil {
    log.Fatalf("Unable to retrieve messages: %v", err)
}
body := message.Payload.Body
data := body.Data
decodedMessage, _ := b64.URLEncoding.DecodeString(data)

GmailAPIの仕様

については今回は割愛しますが、自分は主にusers.messages.listメソッドにクエリーを投げてmessageIdを取得し、取得したmessageIdusers.messages.listへのリクエストに投げてメール本文を取得、という感じでつかってます。

developers.google.com

developers.google.com

取得したメールのオブジェクトの構造は以下URLの通りなので、この通りbody.dataまでを辿って上記の通りデコードすれば本文が取得出来ます。

developers.google.com