aboutsummaryrefslogtreecommitdiffstats
path: root/imap.go
blob: ebdd2c85c95f7fd228c4bf53c24999821ef1b870 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
package alps

import (
	"fmt"
	"io"
	"mime"
	"net"
	"os"

	"github.com/emersion/go-imap/v2/imapclient"
	"github.com/emersion/go-message/charset"
)

func (s *Server) dialIMAP() (*imapclient.Client, error) {
	// TODO: don't print passwords to debug logs
	var debugWriter io.Writer
	if s.Options.Debug {
		debugWriter = os.Stderr
	}

	options := &imapclient.Options{
		DebugWriter: debugWriter,
		WordDecoder: &mime.WordDecoder{
			CharsetReader: charset.Reader,
		},
	}

	var c *imapclient.Client
	var err error
	if s.imap.tls {
		c, err = imapclient.DialTLS(s.imap.host, options)
		if err != nil {
			return nil, fmt.Errorf("failed to connect to IMAPS server: %v", err)
		}
	} else if !s.imap.insecure {
		c, err = imapclient.DialStartTLS(s.imap.host, options)
		if err != nil {
			return nil, fmt.Errorf("failed to connect to IMAP server: %v", err)
		}
	} else {
		conn, err := net.Dial("tcp", s.imap.host)
		if err != nil {
			return nil, fmt.Errorf("failed to connect to IMAP server: %v", err)
		}
		c = imapclient.New(conn, options)
	}

	return c, err
}