I'm trying to develop a simple utility for download a whole list of attachments by a specific label in Gmail. I'm using the official gmail api for Go and I just started with the sample written here then I wrote my own code to archive my goal:
fmt.Println("Labels:")
for _, label := range labelList.Labels {
fmt.Printf("
- %s id: %s
", label.Name, label.Id)
if label.Id == "Label_N" {
messageList, _ := srv.Users.Messages.List(user).LabelIds(label.Id).Do()
if err != nil {
log.Fatalf("Error: %v", err)
}
for _, msg := range messageList.Messages {
// look for message
message, err := srv.Users.Messages.Get(user, msg.Id).Do()
if err != nil {
log.Fatalf("Unable to retrieve message: %v", err)
}
mailReceivedDate := time.Unix(0, message.InternalDate*int64(time.Millisecond)).Format(time.RFC3339Nano)
fmt.Println("______________________________________________")
fmt.Printf("Content-Type: %s
", message.Payload.MimeType)
fmt.Printf("From: %s
", message.Payload.Headers[7].Value)
if len(message.Payload.Parts) > 0 {
for _, p := range message.Payload.Parts {
fmt.Printf("Filename: %s
", p.Filename)
fmt.Printf("Attachment ID: %s
", p.Body.AttachmentId)
if isPdfAttachment(p.MimeType) {
attach, err := srv.Users.Messages.Attachments.Get(user, message.Id, p.Body.AttachmentId).Do()
decoded, _ := base64.URLEncoding.DecodeString(attach.Data)
if err != nil {
log.Fatalf("Unable to retrieve attachment: %v", err)
}
p.Filename = mailReceivedDate + "_" + p.Filename
fmt.Printf("File to write: %s - Type: %s
", p.Filename, p.MimeType)
err = ioutil.WriteFile(p.Filename, decoded, 0644)
if err != nil {
log.Fatalf("Unable to save attachment: %v", err)
}
}
}
}
}
}
}
The problem is that I don't receive any AttachmentId when message MimeType is "multipart/signed" (the email contains 1 pdf file).
What should I do to for download attachments from this kind of email? Can someone help me?