diff --git a/pkg/email/fetch.go b/pkg/email/fetch.go index c338cc5..d8080e2 100644 --- a/pkg/email/fetch.go +++ b/pkg/email/fetch.go @@ -64,12 +64,17 @@ func fetchEmails(imapClient *client.Client) ([]Email, error) { // Fetch the required message attributes messages := make(chan *imap.Message, 10) + fetchErr := make(chan error, 1) section := &imap.BodySectionName{} items := []imap.FetchItem{section.FetchItem(), imap.FetchEnvelope} go func() { - if err := imapClient.Fetch(seqSet, items, messages); err != nil { - log.Fatal("Fetch error: " + err.Error()) + fetchErr <- imapClient.Fetch(seqSet, items, messages) + }() + + // Drain the channel on early return so the goroutine can always exit. + defer func() { + for range messages { } }() @@ -98,6 +103,10 @@ func fetchEmails(imapClient *client.Client) ([]Email, error) { ) result = append(result, *email) } + + if err := <-fetchErr; err != nil { + return result, fmt.Errorf("fetch error: %w", err) + } } return result, nil