summaryrefslogtreecommitdiff
path: root/worker
diff options
context:
space:
mode:
Diffstat (limited to 'worker')
-rw-r--r--worker/imap/worker.go28
1 files changed, 22 insertions, 6 deletions
diff --git a/worker/imap/worker.go b/worker/imap/worker.go
index 55469cf..80d861d 100644
--- a/worker/imap/worker.go
+++ b/worker/imap/worker.go
@@ -3,6 +3,7 @@ package imap
import (
"crypto/tls"
"fmt"
+ "net"
"net/url"
"strings"
@@ -214,29 +215,44 @@ func (w *IMAPWorker) handleImapUpdate(update client.Update) {
func (w *IMAPWorker) connect() (*client.Client, error) {
var (
- c *client.Client
- err error
+ conn *net.TCPConn
+ c *client.Client
)
+
+ addr, err := net.ResolveTCPAddr("tcp", w.config.addr)
+ if err != nil {
+ return nil, err
+ }
+
+ conn, err = net.DialTCP("tcp", nil, addr)
+ if err != nil {
+ return nil, err
+ }
+
+ serverName, _, _ := net.SplitHostPort(w.config.addr)
+ tlsConfig := &tls.Config{ServerName: serverName}
+
switch w.config.scheme {
case "imap":
- c, err = client.Dial(w.config.addr)
+ c, err = client.New(conn)
if err != nil {
return nil, err
}
-
if !w.config.insecure {
- if err := c.StartTLS(&tls.Config{}); err != nil {
+ if err = c.StartTLS(tlsConfig); err != nil {
return nil, err
}
}
case "imaps":
- c, err = client.DialTLS(w.config.addr, &tls.Config{})
+ tlsConn := tls.Client(conn, tlsConfig)
+ c, err = client.New(tlsConn)
if err != nil {
return nil, err
}
default:
return nil, fmt.Errorf("Unknown IMAP scheme %s", w.config.scheme)
}
+
c.ErrorLog = w.worker.Logger
if w.config.user != nil {