aboutsummaryrefslogtreecommitdiff
path: root/server.go
diff options
context:
space:
mode:
authorSimon Ser <contact@emersion.fr>2020-01-20 13:08:05 +0100
committerSimon Ser <contact@emersion.fr>2020-01-20 13:08:05 +0100
commita0800c243688aecf391ff74ea9f713cd2a6ffb45 (patch)
treefb707f8a42b3319487b9ad06de98e366119f8f49 /server.go
parentdb328bf7c374ed7b079d9d8984cb25165605c28e (diff)
downloadalps-a0800c243688aecf391ff74ea9f713cd2a6ffb45.tar.gz
alps-a0800c243688aecf391ff74ea9f713cd2a6ffb45.zip
Auto-discover upstream SMTP and IMAP servers
Closes: https://todo.sr.ht/~sircmpwn/koushin/49
Diffstat (limited to 'server.go')
-rw-r--r--server.go21
1 files changed, 17 insertions, 4 deletions
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