From a0800c243688aecf391ff74ea9f713cd2a6ffb45 Mon Sep 17 00:00:00 2001 From: Simon Ser Date: Mon, 20 Jan 2020 13:08:05 +0100 Subject: Auto-discover upstream SMTP and IMAP servers Closes: https://todo.sr.ht/~sircmpwn/koushin/49 --- server.go | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) (limited to 'server.go') diff --git a/server.go b/server.go index 71f40bf..11b55f9 100644 --- a/server.go +++ b/server.go @@ -108,12 +108,18 @@ func (s *Server) parseIMAPUpstream() error { return fmt.Errorf("failed to parse upstream IMAP server: %v", err) } + if u.Scheme == "" { + u, err = discoverIMAP(u.Host) + if err != nil { + return fmt.Errorf("failed to discover IMAP server: %v", err) + } + } + s.imap.host = u.Host switch u.Scheme { case "imap": // This space is intentionally left blank - case "imaps", "": - // TODO: auto-discovery for empty scheme + case "imaps": s.imap.tls = true case "imap+insecure": s.imap.insecure = true @@ -133,12 +139,19 @@ func (s *Server) parseSMTPUpstream() error { return fmt.Errorf("failed to parse upstream SMTP server: %v", err) } + if u.Scheme == "" { + u, err = discoverSMTP(u.Host) + if err != nil { + s.e.Logger.Printf("Failed to discover SMTP server: %v", err) + return nil + } + } + s.smtp.host = u.Host switch u.Scheme { case "smtp": // This space is intentionally left blank - case "smtps", "": - // TODO: auto-discovery for empty scheme + case "smtps": s.smtp.tls = true case "smtp+insecure": s.smtp.insecure = true -- cgit v1.2.3-59-g8ed1b