feat(imapx): connect, endpoint test, login test with folder listing
This commit is contained in:
@@ -0,0 +1,50 @@
|
||||
package imapx
|
||||
|
||||
import (
|
||||
"context"
|
||||
"crypto/tls"
|
||||
"fmt"
|
||||
|
||||
"github.com/emersion/go-imap/v2/imapclient"
|
||||
)
|
||||
|
||||
type Endpoint struct {
|
||||
Host string
|
||||
Port int
|
||||
TLSMode string // ssl | starttls | plain
|
||||
}
|
||||
|
||||
func (e Endpoint) addr() string { return fmt.Sprintf("%s:%d", e.Host, e.Port) }
|
||||
|
||||
func Connect(ctx context.Context, ep Endpoint) (*imapclient.Client, error) {
|
||||
var (
|
||||
c *imapclient.Client
|
||||
err error
|
||||
)
|
||||
switch ep.TLSMode {
|
||||
case "ssl":
|
||||
c, err = imapclient.DialTLS(ep.addr(), &imapclient.Options{
|
||||
TLSConfig: &tls.Config{ServerName: ep.Host},
|
||||
})
|
||||
case "starttls":
|
||||
c, err = imapclient.DialStartTLS(ep.addr(), &imapclient.Options{
|
||||
TLSConfig: &tls.Config{ServerName: ep.Host},
|
||||
})
|
||||
case "plain":
|
||||
c, err = imapclient.DialInsecure(ep.addr(), nil)
|
||||
default:
|
||||
return nil, fmt.Errorf("unknown tls_mode %q", ep.TLSMode)
|
||||
}
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return c, nil
|
||||
}
|
||||
|
||||
func TestEndpoint(ctx context.Context, ep Endpoint) error {
|
||||
c, err := Connect(ctx, ep)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return c.Logout().Wait()
|
||||
}
|
||||
Reference in New Issue
Block a user