From 01b15b7ac41d38cdcaed10077657bd5f3a2e900a Mon Sep 17 00:00:00 2001 From: Aine Date: Tue, 14 Feb 2023 20:26:30 +0200 Subject: [PATCH] proper multi-error message, try better to find SMTP server, fixes #58 --- go.mod | 2 +- go.sum | 4 +-- .../etke.cc/go/trysmtp/.gitlab-ci.yml | 11 ------- .../gitlab.com/etke.cc/go/trysmtp/client.go | 33 ++++++++++--------- vendor/modules.txt | 2 +- 5 files changed, 22 insertions(+), 30 deletions(-) delete mode 100644 vendor/gitlab.com/etke.cc/go/trysmtp/.gitlab-ci.yml diff --git a/go.mod b/go.mod index b53bd76..41150e2 100644 --- a/go.mod +++ b/go.mod @@ -21,7 +21,7 @@ require ( gitlab.com/etke.cc/go/logger v1.1.0 gitlab.com/etke.cc/go/mxidwc v1.0.0 gitlab.com/etke.cc/go/secgen v1.1.1 - gitlab.com/etke.cc/go/trysmtp v1.1.2 + gitlab.com/etke.cc/go/trysmtp v1.1.3 gitlab.com/etke.cc/go/validator v1.0.6 gitlab.com/etke.cc/linkpearl v0.0.0-20230213101923-10ee6beb7577 maunium.net/go/mautrix v0.13.0 diff --git a/go.sum b/go.sum index c4a549f..48a763b 100644 --- a/go.sum +++ b/go.sum @@ -106,8 +106,8 @@ gitlab.com/etke.cc/go/mxidwc v1.0.0 h1:6EAlJXvs3nU4RaMegYq6iFlyVvLw7JZYnZmNCGMYQ gitlab.com/etke.cc/go/mxidwc v1.0.0/go.mod h1:E/0kh45SAN9+ntTG0cwkAEKdaPxzvxVmnjwivm9nmz8= gitlab.com/etke.cc/go/secgen v1.1.1 h1:RmKOki725HIhWJHzPtAc9X4YvBneczndchpMgoDkE8w= gitlab.com/etke.cc/go/secgen v1.1.1/go.mod h1:3pJqRGeWApzx7qXjABqz2o2SMCNpKSZao/gXVdasqE8= -gitlab.com/etke.cc/go/trysmtp v1.1.2 h1:Jg+J/zgx77wqJ9J5L5dlKFoQLka6yYTXa2wf+GNhjnQ= -gitlab.com/etke.cc/go/trysmtp v1.1.2/go.mod h1:lOO7tTdAE0a3ETV3wN3GJ7I1Tqewu7YTpPWaOmTteV0= +gitlab.com/etke.cc/go/trysmtp v1.1.3 h1:e2EHond77onMaecqCg6mWumffTSEf+ycgj88nbeefDI= +gitlab.com/etke.cc/go/trysmtp v1.1.3/go.mod h1:lOO7tTdAE0a3ETV3wN3GJ7I1Tqewu7YTpPWaOmTteV0= gitlab.com/etke.cc/go/validator v1.0.6 h1:w0Muxf9Pqw7xvF7NaaswE6d7r9U3nB2t2l5PnFMrecQ= gitlab.com/etke.cc/go/validator v1.0.6/go.mod h1:Id0SxRj0J3IPhiKlj0w1plxVLZfHlkwipn7HfRZsDts= gitlab.com/etke.cc/linkpearl v0.0.0-20230213101923-10ee6beb7577 h1:MXvoTJ9Qp+dWezXR2sXP7HTk9ijXAorEDAy/bxJOxi8= diff --git a/vendor/gitlab.com/etke.cc/go/trysmtp/.gitlab-ci.yml b/vendor/gitlab.com/etke.cc/go/trysmtp/.gitlab-ci.yml deleted file mode 100644 index 45fcf2d..0000000 --- a/vendor/gitlab.com/etke.cc/go/trysmtp/.gitlab-ci.yml +++ /dev/null @@ -1,11 +0,0 @@ -lint: - image: registry.gitlab.com/etke.cc/base - script: - - golangci-lint run ./... - -unit: - image: registry.gitlab.com/etke.cc/base - script: - - go test -coverprofile=cover.out ./... - - go tool cover -func=cover.out - - rm -f cover.out diff --git a/vendor/gitlab.com/etke.cc/go/trysmtp/client.go b/vendor/gitlab.com/etke.cc/go/trysmtp/client.go index 4d1e311..490052a 100644 --- a/vendor/gitlab.com/etke.cc/go/trysmtp/client.go +++ b/vendor/gitlab.com/etke.cc/go/trysmtp/client.go @@ -41,14 +41,16 @@ func unwrapErrors(errs []error) error { return nil } - tokens := strings.Repeat("%v; ", len(errs)) - // make it compatible with < 1.18 - ierrs := make([]interface{}, len(errs)) - for _, err := range errs { - ierrs = append(ierrs, err) + var text strings.Builder + last := len(errs) - 1 + for i := 0; i < len(errs); i++ { + text.WriteString(errs[i].Error()) + if i < last { + text.WriteString("; ") + } } - return fmt.Errorf(tokens, ierrs...) + return fmt.Errorf(text.String()) } func initClient(localname, hostname string) (*smtp.Client, error) { @@ -60,6 +62,9 @@ func initClient(localname, hostname string) (*smtp.Client, error) { cerrs := []error{} var client *smtp.Client for _, mx := range mxs { + if mx.Host == "." { + continue // no records case + } for _, addr := range SMTPAddrs { client, err = trySMTP(localname, strings.TrimSuffix(mx.Host, "."), addr) if err != nil { @@ -73,15 +78,13 @@ func initClient(localname, hostname string) (*smtp.Client, error) { // If there are no MX records, according to https://datatracker.ietf.org/doc/html/rfc5321#section-5.1, // we're supposed to try talking directly to the host. - if len(mxs) == 0 { - for _, addr := range SMTPAddrs { - client, err = trySMTP(localname, hostname, addr) - if err != nil { - cerrs = append(cerrs, err) - } - if client != nil { - return client, unwrapErrors(cerrs) - } + for _, addr := range SMTPAddrs { + client, err = trySMTP(localname, hostname, addr) + if err != nil { + cerrs = append(cerrs, err) + } + if client != nil { + return client, unwrapErrors(cerrs) } } diff --git a/vendor/modules.txt b/vendor/modules.txt index 0cb2a9f..6d673de 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -137,7 +137,7 @@ gitlab.com/etke.cc/go/mxidwc # gitlab.com/etke.cc/go/secgen v1.1.1 ## explicit; go 1.19 gitlab.com/etke.cc/go/secgen -# gitlab.com/etke.cc/go/trysmtp v1.1.2 +# gitlab.com/etke.cc/go/trysmtp v1.1.3 ## explicit; go 1.17 gitlab.com/etke.cc/go/trysmtp # gitlab.com/etke.cc/go/validator v1.0.6