get mail body and sender

This commit is contained in:
DBras 2025-03-02 17:09:52 +01:00
parent b0400b7f95
commit 7cba1942b5
1 changed files with 42 additions and 7 deletions

49
main.go
View File

@ -5,7 +5,9 @@ import (
"fmt" "fmt"
"log" "log"
"os" "os"
"strings"
"path/filepath" "path/filepath"
"encoding/base64"
"golang.org/x/oauth2/google" "golang.org/x/oauth2/google"
"google.golang.org/api/gmail/v1" "google.golang.org/api/gmail/v1"
@ -15,6 +17,35 @@ import (
const CREDENTIALS_DIR = "creds" const CREDENTIALS_DIR = "creds"
const TOKEN_FILE = "token.json" const TOKEN_FILE = "token.json"
const CREDENTIALS_FILE = "credentials.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() { func main() {
ctx := context.Background() ctx := context.Background()
@ -36,16 +67,20 @@ func main() {
} }
user := "me" user := "me"
r, err := service.Users.Labels.List(user).Do() r, err := service.Users.Messages.List(user).LabelIds("INBOX").Do()
if err != nil { if err != nil {
log.Fatalf("Unable to retrieve labels: %v", err) log.Fatalf("Unable to retrieve messages: %v", err)
} }
if len(r.Labels) == 0 { if len(r.Messages) == 0 {
fmt.Println("No labels found") fmt.Println("No messages found")
return return
} }
fmt.Println("Labels:") fmt.Println("Messages:")
for _, label := range r.Labels { for _, msg := range r.Messages {
fmt.Printf("- %s\n", label.Name) 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)
} }
} }