如何获取一个主题gmail中的所有对话

How to fetch all conversations in one subject gmail

我使用 emersion/go-imap 在 gmail 中获取数据时遇到一个问题。我不能像这样接受所有消息(在主题中回复)

我只能收到发件人的最后一条消息。有任何解决方案来获取所有回复消息吗?

我的代码模式轮流提供大约 5 个邮件数据 min/round,如果发件人在一个主题中发送超过 1 个回复,就会出现这个问题。我无法收到第一条消息。我只能收到发件人的最后一条消息

一些代码:

// List mailboxes ลิสต์ mailbox ของแต่ละ channel
mailboxes := make(chan *imap.MailboxInfo, 10)
done := make(chan error, 1)
go func() {
    done <- c.List("", "*", mailboxes)
}()

log.Println("Mailboxes:")
for m := range mailboxes {
    log.Println("* " + m.Name)
}

if err := <-done; err != nil {
    log.Fatal(err)
}

listBox := "INBOX"

// Select INBOX
mbox, err := c.Select(listBox, false)
if err != nil {
    log.Fatal(err)
}

// set range for feed
seqSet := new(imap.SeqSet)
// is for testing get lastone only
seqSet.AddRange(mbox.Messages, mbox.Messages)

log.Println("message lens : ", (mbox.Messages))

// Get the whole message body
var section imap.BodySectionName

items := []imap.FetchItem{section.FetchItem(), imap.FetchEnvelope}

// criteria := imap.NewSearchCriteria()

messages := make(chan *imap.Message, 10)
go func() {
    if err := c.Fetch(seqSet, items, messages); err != nil {
        log.Fatal(err)
    }
}()

msg := <-messages
if msg == nil {
    log.Fatal("Server didn't returned message")
}

// Create a new mail reader
mailReader, err := mail.CreateReader(msg.GetBody(&section))
if err != nil {
    log.Fatal(err)
}
// Print some info about the message
header := mailReader.Header
if ID, err := header.MessageID(); err == nil {
    log.Println("ID:", ID)
}

if date, err := header.Date(); err == nil {
    log.Println("Date:", date)
}
if from, err := header.AddressList("From"); err == nil {
    log.Println("From:", from)
}
if to, err := header.AddressList("To"); err == nil {
    log.Println("To:", to)
}
if subject, err := header.Subject(); err == nil {
    log.Println("Subject:", subject)
}

// Process each message's part
count := 0
for {
    p, err := mailReader.NextPart()
    if err == io.EOF {
        break
    } else if err != nil {
        panic(err)
    }

    switch h := p.Header.(type) {
    case *mail.InlineHeader:
        // This is the message's text (can be plain-text or HTML)
        b, _ := ioutil.ReadAll(p.Body)
        fmt.Printf("Got text: %v\n", string(b))
    case *mail.AttachmentHeader:
        // This is an attachment
        filename, _ := h.Filename()
        fmt.Printf("Got attachment: %v\n", filename)
        // set filename
        file, err := os.Create(filename)
        if err != nil {
            panic(err)
        }
        defer file.Close()
        // create file
        // using io.Copy instead of io.ReadAll to avoid insufficient memory issues
        size, err := io.Copy(file, p.Body)
        if err != nil {
            panic(err)
        }
        fmt.Printf("Saved %v bytes into %v\n", size, filename)

    }
    count++
}
fmt.Printf("\n\nRound of mail : %v", count)

我找到了一种在 gmail 中提供所有对话的方法。 Gmail 有关于邮件分组的设置。我关掉了这个设置邮件的回复会一封一封显示,可以得到我想要的数据。

转到设置 --> 对话视图。