--- a/plugins/base/imap.go 2022-05-08 10:19:23.329157653 +0200 +++ b/plugins/base/imap.go 2022-05-08 10:23:38.878395784 +0200 @@ -530,14 +530,23 @@ } ch := make(chan *imap.Message, 1) - if err := conn.UidFetch(seqSet, fetch, ch); err != nil { - return nil, nil, fmt.Errorf("failed to fetch message: %v", err) - } + done := make(chan error, 1) + go func() { + done <- conn.UidFetch(seqSet, fetch, ch) + }() + // There may be multiple FETCH data responses. + // Keep the first message and discard the rest. msg := <-ch if msg == nil { return nil, nil, fmt.Errorf("server didn't return message") } + for range ch { + } + + if err := <-done; err != nil { + return nil, nil, fmt.Errorf("failed to fetch message: %v", err) + } body := msg.GetBody(&partHeaderSection) if body == nil {