Reputation: 15
I have following function in Go that uses emersion/go-imap library. I am calling it every minute. It is manifesting unexpected behaviour in following way:
func (f *imapMessageFetcher) searchUnreadFetchProcess() error {
criteria := imap.SearchCriteria{
Not: []imap.SearchCriteria{{
Flag: []imap.Flag{imap.FlagSeen},
}},
}
data, err := f.client.Search(&criteria, nil).Wait()
if err != nil {
return fmt.Errorf("failed to search for unread messages: %w", err)
}
seqNums := data.AllSeqNums()
if len(seqNums) == 0 {
return nil
}
log.Printf("found %d unread messages\n", len(seqNums))
seqset := imap.SeqSetNum(seqNums...)
fetchOptions := &imap.FetchOptions{
Flags: true,
Envelope: true,
BodySection: []*imap.FetchItemBodySection{{}},
}
fetchCmd := f.client.Fetch(seqset, fetchOptions)
defer func() {
err := fetchCmd.Close()
if err != nil {
log.Printf("error closing fetchCmd: %d\n", err)
}
}()
for {
msgData := fetchCmd.Next()
if msgData == nil {
fmt.Println("no more messages to read")
break
}
msgBuffer, err := msgData.Collect()
if err != nil {
return fmt.Errorf("error collecting message data %d: ", err)
}
log.Printf("finished reading message\n")
f.outputMessages <- msgBuffer
}
return nil
}
As far as I understand, this is not what is supposed to happen. What might be the cause?
Upvotes: 1
Views: 47