Browse Source

Add missing default port for starttls and validate scheme to ensure support

Mark Gardner 3 years ago
parent
commit
b7f3701502
1 changed files with 14 additions and 4 deletions
  1. 14 4
      remotes.go

+ 14 - 4
remotes.go

@@ -20,6 +20,7 @@ type Remote struct {
 //
 // smtp://[user[:password]@][netloc][:port][/remote_sender][?param1=value1&...]
 // smtps://[user[:password]@][netloc][:port][/remote_sender][?param1=value1&...]
+// starttls://[user[:password]@][netloc][:port][/remote_sender][?param1=value1&...]
 //
 // Supported Params:
 // - skipVerify: can be "true" or empty to prevent ssl verification of remote server's certificate.
@@ -31,12 +32,21 @@ func ParseRemote(remoteURL string) (*Remote, error) {
 		return nil, err
 	}
 
+	if u.Scheme != "smtp" && u.Scheme != "smtps" && u.Scheme != "starttls" {
+		return nil, fmt.Errorf("'%s' is not a supported relay scheme", u.Scheme)
+	}
+
 	hostname, port := u.Hostname(), u.Port()
 
-	if u.Scheme == "smtp" && port == "" {
-		port = "25"
-	} else if u.Scheme == "smtps" && port == "" {
-		port = "465"
+	if port == "" {
+		switch u.Scheme {
+		case "smtp":
+			port = "25"
+		case "smtps":
+			port = "465"
+		case "starttls":
+			port = "587"
+		}
 	}
 
 	q := u.Query()