From b7f3701502009fb5c82338e7555a8d943715ac44 Mon Sep 17 00:00:00 2001 From: Mark Gardner Date: Thu, 21 Apr 2022 11:28:48 -0500 Subject: [PATCH] Add missing default port for starttls and validate scheme to ensure support --- remotes.go | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/remotes.go b/remotes.go index 07ae8d3..b05d825 100644 --- a/remotes.go +++ b/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()