Я пытаюсь разработать простую утилиту для загрузки целого списка вложений по определенной метке в Gmail.Я использую официальный gmail API для Go, и я только начал с примера, написанного здесь , затем я написал свой собственный код для архивации своей цели:
fmt.Println("Labels:")
for _, label := range labelList.Labels {
fmt.Printf("\n- %s id: %s\n", 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\n", message.Payload.MimeType)
fmt.Printf("From: %s\n", message.Payload.Headers[7].Value)
if len(message.Payload.Parts) > 0 {
for _, p := range message.Payload.Parts {
fmt.Printf("Filename: %s\n", p.Filename)
fmt.Printf("Attachment ID: %s\n", 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\n", p.Filename, p.MimeType)
err = ioutil.WriteFile(p.Filename, decoded, 0644)
if err != nil {
log.Fatalf("Unable to save attachment: %v", err)
}
}
}
}
}
}
}
Проблема в том, что яне получают AttachmentId, когда сообщение MimeType имеет значение « multipart / подписано » (электронное письмо содержит 1 файл PDF).
Что я должен сделать, чтобы загрузить вложения из этого вида электронной почты?Кто-нибудь может мне помочь?