Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- func main() {
- c, err := client.DialTLS(fmt.Sprintf("%s:%s", server, "993"), nil)
- if err != nil {
- log.Fatal(err)
- }
- defer c.Logout()
- if err := c.Login(login, pass); err != nil {
- log.Fatal(err)
- }
- var mbox *imap.MailboxStatus
- if mbox, err = c.Select("INBOX", false); err != nil {
- log.Fatal(err)
- }
- idleClient := idle.NewClient(c)
- 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:
- switch update.(type) {
- case *client.MailboxUpdate:
- go func() {
- section := &imap.BodySectionName{}
- items := []imap.FetchItem{section.FetchItem()}
- seqset := new(imap.SeqSet)
- seqset.AddRange(mbox.Messages, mbox.Messages)
- messages := make(chan *imap.Message)
- fetchItems := make(chan error, 1)
- go func() {
- fetchItems <- c.Fetch(seqset, items, messages)
- }()
- msg := <-messages
- r := msg.GetBody(section)
- m, err := mail.ReadMessage(r)
- if err != nil {
- log.Fatal(err)
- }
- body, err := ioutil.ReadAll(m.Body)
- if err != nil {
- log.Fatal(err)
- }
- log.Println(string(body))
- if err := <-fetchItems; err != nil {
- log.Fatal(err)
- }
- }()
- }
- case err := <-done:
- if err != nil {
- fmt.Println(err)
- }
- log.Println("Not idling anymore")
- return
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement