proper multi-error message, try better to find SMTP server, fixes #58

This commit is contained in:
Aine
2023-02-14 20:26:30 +02:00
parent 3e0ecc1c02
commit 039777d474
5 changed files with 22 additions and 30 deletions

2
go.mod
View File

@@ -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

4
go.sum
View File

@@ -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=

View File

@@ -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

View File

@@ -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,7 +78,6 @@ 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 {
@@ -83,7 +87,6 @@ func initClient(localname, hostname string) (*smtp.Client, error) {
return client, unwrapErrors(cerrs)
}
}
}
return nil, unwrapErrors(cerrs)
}

2
vendor/modules.txt vendored
View File

@@ -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