BrianLeishman / go-imap

Super Simple IMAP Client Library for Golang
MIT License
66 stars 24 forks source link

feature/idle: add idle implementation #18

Closed 9ssi7 closed 2 weeks ago

9ssi7 commented 2 weeks ago

IDLE implementation added.

See RFC from here

Example code:

package main

import (
    "fmt"

    "github.com/BrianLeishman/go-imap"
)

func main() {
    imap.Verbose = true
    im, err := imap.New("<REPLACE_ME>", "<REPLACE_ME>", "imap.gmail.com", 993)
    if err != nil {
        panic(err)
    }
    err = im.SelectFolder("INBOX")
    if err != nil {
        panic(err)
    }
    err = im.StartIdle(&imap.IdleHandler{
        OnExists: func(event imap.ExistsEvent) {
            fmt.Println("New email indx:", event.MessageIndex)
        },
        OnExpunge: func(event imap.ExpungeEvent) {
            fmt.Println("Deleted message:", event.MessageIndex)
        },
        OnFetch: func(event imap.FetchEvent) {
            fmt.Println("Fetched message:", event.MessageIndex)
            fmt.Println("UID:", event.UID)
            fmt.Println("Flags:", event.Flags)
        },
    })
    if err != nil {
        panic(err)
    }
    select {}
}