all repos — postern @ main

Modern mail management

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}