diff --git a/main.go b/main.go index 9b87979..56d57eb 100644 --- a/main.go +++ b/main.go @@ -5,7 +5,9 @@ import ( "fmt" "log" "os" + "strings" "path/filepath" + "encoding/base64" "golang.org/x/oauth2/google" "google.golang.org/api/gmail/v1" @@ -15,6 +17,35 @@ import ( const CREDENTIALS_DIR = "creds" const TOKEN_FILE = "token.json" const CREDENTIALS_FILE = "credentials.json" +const USER = "me" + +func getEmail(service *gmail.Service, msgID string) *gmail.Message { + r, err := service.Users.Messages.Get(USER, msgID).Format("FULL").Do() + if err != nil { + log.Fatalf("Error when getting mail content: %v", err) + } + if r == nil { + log.Fatalf("Response when getting mail was nil") + } + return r +} + +func getEmailPlaintext (mail *gmail.Message) (fromAddr string, bodyStr string) { + part := mail.Payload.Parts[0].Body.Data + body, err := base64.StdEncoding.DecodeString(part) + if err != nil { + log.Fatalf("Error in message body decoding: %v", err) + } + + for _, header := range mail.Payload.Headers { + if header.Name == "From" { + _, addrPart, _ := strings.Cut(header.Value, "<") + fromAddr, _, _ = strings.Cut(addrPart, ">") + } + } + + return fromAddr, string(body) +} func main() { ctx := context.Background() @@ -36,16 +67,20 @@ func main() { } user := "me" - r, err := service.Users.Labels.List(user).Do() + r, err := service.Users.Messages.List(user).LabelIds("INBOX").Do() if err != nil { - log.Fatalf("Unable to retrieve labels: %v", err) + log.Fatalf("Unable to retrieve messages: %v", err) } - if len(r.Labels) == 0 { - fmt.Println("No labels found") + if len(r.Messages) == 0 { + fmt.Println("No messages found") return } - fmt.Println("Labels:") - for _, label := range r.Labels { - fmt.Printf("- %s\n", label.Name) + fmt.Println("Messages:") + for _, msg := range r.Messages { + fmt.Printf("- %s\n", msg.Id) + mail := getEmail(service, msg.Id) + fromAddr, msgBody := getEmailPlaintext(mail) + fmt.Printf("From: %s\n", fromAddr) + fmt.Printf("Message:\n%s\n", msgBody) } }