Не удается загрузить вложение из составного / подписанного типа при использовании Gmail API для Go - PullRequest
0 голосов
/ 22 декабря 2018

Я пытаюсь разработать простую утилиту для загрузки целого списка вложений по определенной метке в 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).

Logs

Что я должен сделать, чтобы загрузить вложения из этого вида электронной почты?Кто-нибудь может мне помочь?

...