get mail body and sender
This commit is contained in:
parent
b0400b7f95
commit
7cba1942b5
49
main.go
49
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)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue