internal/imap/server.go (view raw)
1package imap
2
3import (
4 "github.com/emersion/go-imap/v2"
5 "github.com/emersion/go-imap/v2/imapserver"
6)
7
8func (i *Server) Start() error {
9 op := &imapserver.Options{
10 NewSession: i.handleIMAPConn,
11 Caps: imap.CapSet{
12 imap.CapIMAP4rev1: {},
13 imap.CapIMAP4rev2: {},
14 },
15 Logger: nil,
16 TLSConfig: i.tlsConfig,
17 InsecureAuth: false,
18 DebugWriter: nil, // os.Stdout,
19 }
20
21 s := imapserver.New(op)
22
23 i.mu.Lock()
24 i.imapSrv = s
25 i.status = "running"
26 i.mu.Unlock()
27
28 err := s.ListenAndServeTLS(i.listen)
29 if err != nil {
30 return err
31 }
32
33 return nil
34}
35
36func (i *Server) Stop() error {
37 i.mu.Lock()
38 defer i.mu.Unlock()
39 i.status = "stopped"
40 if i.imapSrv != nil {
41 return i.imapSrv.Close()
42 }
43 return nil
44}
45
46func (i *Server) Status() string {
47 i.mu.Lock()
48 defer i.mu.Unlock()
49 return i.status
50}