aboutsummaryrefslogtreecommitdiff
path: root/internal/imap/client.go
diff options
context:
space:
mode:
Diffstat (limited to 'internal/imap/client.go')
-rw-r--r--internal/imap/client.go49
1 files changed, 48 insertions, 1 deletions
diff --git a/internal/imap/client.go b/internal/imap/client.go
index c916a64..ebcd7b3 100644
--- a/internal/imap/client.go
+++ b/internal/imap/client.go
@@ -1,11 +1,15 @@
package imap
import (
+ "fmt"
+ "net"
"sync/atomic"
+ "time"
uidplus "github.com/emersion/go-imap-uidplus"
imapClient "github.com/emersion/go-imap/client"
+ "github.com/Necoro/feed2imap-go/pkg/config"
"github.com/Necoro/feed2imap-go/pkg/log"
)
@@ -26,6 +30,49 @@ type Client struct {
connChannel chan *connection
}
+var dialer imapClient.Dialer
+
+func init() {
+ dialer = &net.Dialer{Timeout: 30 * time.Second}
+}
+
+func newImapClient(url config.Url) (c *imapClient.Client, err error) {
+ if url.ForceTLS() {
+ if c, err = imapClient.DialWithDialerTLS(dialer, url.HostPort(), nil); err != nil {
+ return nil, fmt.Errorf("connecting (TLS) to %s: %w", url.Host, err)
+ }
+ log.Print("Connected to ", url.HostPort(), " (TLS)")
+ } else {
+ if c, err = imapClient.DialWithDialer(dialer, url.HostPort()); err != nil {
+ return nil, fmt.Errorf("connecting to %s: %w", url.Host, err)
+ }
+ }
+
+ return
+}
+
+func (cl *Client) connect(url config.Url) (*connection, error) {
+ c, err := newImapClient(url)
+ if err != nil {
+ return nil, err
+ }
+
+ conn := cl.createConnection(c)
+
+ if !url.ForceTLS() {
+ if err = conn.startTls(); err != nil {
+ return nil, err
+ }
+ }
+
+ if err = c.Login(url.User, url.Password); err != nil {
+ return nil, fmt.Errorf("login to %s: %w", url.Host, err)
+ }
+
+ cl.connChannel <- conn
+ return conn, nil
+}
+
func (cl *Client) Disconnect() {
if cl != nil {
cl.stopCommander()
@@ -62,7 +109,7 @@ func (cl *Client) createConnection(c *imapClient.Client) *connection {
return conn
}
-func NewClient() *Client {
+func newClient() *Client {
return &Client{
mailboxes: NewMailboxes(),
connChannel: make(chan *connection, 0),