IDLE extension for go-imap.
// Let's assume c is an IMAP client var c *client.Client // Select a mailbox if _, err := c.Select("INBOX", false); err != nil { log.Fatal(err) } idleClient := idle.NewClient(c) // Create a channel to receive mailbox updates updates := make(chan client.Update) c.Updates = updates // Start idling done := make(chan error, 1) go func() { done <- idleClient.IdleWithFallback(nil, 0) }() // Listen for updates for { select { case update := <-updates: log.Println("New update:", update) case err := <-done: if err != nil { log.Fatal(err) } log.Println("Not idling anymore") return } }s.Enable(idle.NewExtension())MIT