Advertisement
Guest User

Untitled

a guest
Dec 27th, 2019
142
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Go 1.49 KB | None | 0 0
  1. func main() {
  2.     c, err := client.DialTLS(fmt.Sprintf("%s:%s", server, "993"), nil)
  3.     if err != nil {
  4.         log.Fatal(err)
  5.     }
  6.     defer c.Logout()
  7.  
  8.     if err := c.Login(login, pass); err != nil {
  9.         log.Fatal(err)
  10.     }
  11.     var mbox *imap.MailboxStatus
  12.     if mbox, err = c.Select("INBOX", false); err != nil {
  13.         log.Fatal(err)
  14.     }
  15.  
  16.     idleClient := idle.NewClient(c)
  17.  
  18.     updates := make(chan client.Update)
  19.     c.Updates = updates
  20.  
  21.     // Start idling
  22.     done := make(chan error, 1)
  23.     go func() {
  24.         done <- idleClient.IdleWithFallback(nil, 0)
  25.     }()
  26.  
  27.     // Listen for updates
  28.     for {
  29.         select {
  30.         case update := <-updates:
  31.             switch update.(type) {
  32.             case *client.MailboxUpdate:
  33.                 go func() {
  34.                     section := &imap.BodySectionName{}
  35.                     items := []imap.FetchItem{section.FetchItem()}
  36.                     seqset := new(imap.SeqSet)
  37.                     seqset.AddRange(mbox.Messages, mbox.Messages)
  38.                     messages := make(chan *imap.Message)
  39.                     fetchItems := make(chan error, 1)
  40.                     go func() {
  41.                         fetchItems <- c.Fetch(seqset, items, messages)
  42.                     }()
  43.                     msg := <-messages
  44.  
  45.                     r := msg.GetBody(section)
  46.                     m, err := mail.ReadMessage(r)
  47.                     if err != nil {
  48.                         log.Fatal(err)
  49.                     }
  50.  
  51.                     body, err := ioutil.ReadAll(m.Body)
  52.                     if err != nil {
  53.                         log.Fatal(err)
  54.                     }
  55.                     log.Println(string(body))
  56.  
  57.                     if err := <-fetchItems; err != nil {
  58.                         log.Fatal(err)
  59.                     }
  60.                 }()
  61.             }
  62.         case err := <-done:
  63.             if err != nil {
  64.                 fmt.Println(err)
  65.             }
  66.             log.Println("Not idling anymore")
  67.             return
  68.         }
  69.     }
  70. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement