Go言語(golang)で Gmail API を使う
検証環境
Windows10 Home Edition C:\>go version go version go1.8 windows/amd64
Access Token の取得
以下の記事を参考に Gmail API で使用する Access Token を取得する
takaya030.hatenablog.com
oauth2 関連パッケージの取得
C:\>go get golang.org/x/oauth2 C:\>go get golang.org/x/oauth2/google C:\>go get google.golang.org/api/gmail/v1
ソースコード
gmailtest.go
package main import ( "fmt" "time" "log" "golang.org/x/oauth2" "golang.org/x/oauth2/google" gmail "google.golang.org/api/gmail/v1" ) func main() { config := oauth2.Config{ ClientID: "Your Client ID", ClientSecret: "Your Client Secret", Endpoint: google.Endpoint, RedirectURL: "urn:ietf:wg:oauth:2.0:oob", //今回はリダイレクトしないためこれ Scopes: []string{"https://mail.google.com/"}, //必要なスコープを追加 } expiry,_ := time.Parse("2006-01-02", "2017-07-11") token := oauth2.Token{ AccessToken: "Your Access Token", TokenType: "Bearer", RefreshToken: "Your Refresh Token", Expiry: expiry, } client := config.Client(oauth2.NoContext, &token) srv, err := gmail.New(client) if err != nil { log.Fatalf("Unable to retrieve gmail Client %v", err) } r, err := srv.Users.Labels.List("me").Do() if err != nil { log.Fatalf("Unable to get labels. %v", err) } if (len(r.Labels) > 0) { fmt.Print("Labels:\n") for _, l := range r.Labels { fmt.Printf("- %s\n", l.Name) } } else { fmt.Print("No label found.") } }
ビルド
C:\go_src>go build gmailtest.go
動作確認
C:\go_src>gmailtest.exe
Labels:
- CATEGORY_PERSONAL
- プライベート
- 旅行
- CATEGORY_SOCIAL
- 領収書
- IMPORTANT
- 仕事
- CATEGORY_UPDATES
- CATEGORY_FORUMS
- CHAT
- SENT
- INBOX
- TRASH
- CATEGORY_PROMOTIONS
- DRAFT
- SPAM
- STARRED
- UNREAD