package imap import ( "github.com/emersion/go-imap/v2" "github.com/emersion/go-imap/v2/imapserver" ) func (i *Server) Start() error { op := &imapserver.Options{ NewSession: i.handleIMAPConn, Caps: imap.CapSet{ imap.CapIMAP4rev1: {}, imap.CapIMAP4rev2: {}, }, Logger: nil, TLSConfig: i.tlsConfig, InsecureAuth: false, DebugWriter: nil, // os.Stdout, } s := imapserver.New(op) i.mu.Lock() i.imapSrv = s i.status = "running" i.mu.Unlock() err := s.ListenAndServeTLS(i.listen) if err != nil { return err } return nil } func (i *Server) Stop() error { i.mu.Lock() defer i.mu.Unlock() i.status = "stopped" if i.imapSrv != nil { return i.imapSrv.Close() } return nil } func (i *Server) Status() string { i.mu.Lock() defer i.mu.Unlock() return i.status }