ultisuite-backend/internal/mail/autoconfig/mx.go
2026-05-24 00:03:36 +02:00

43 lines
1013 B
Go

package autoconfig
import (
"context"
"net"
"sort"
"strings"
)
func lookupMX(ctx context.Context, domain string) ([]string, error) {
resolver := net.Resolver{}
mxRecords, err := resolver.LookupMX(ctx, domain)
if err != nil {
return nil, err
}
sort.Slice(mxRecords, func(i, j int) bool {
return mxRecords[i].Pref < mxRecords[j].Pref
})
hosts := make([]string, 0, len(mxRecords))
for _, mx := range mxRecords {
host := strings.TrimSuffix(strings.ToLower(mx.Host), ".")
if host != "" {
hosts = append(hosts, host)
}
}
return hosts, nil
}
func discoverFromMX(ctx context.Context, email, domain string) (Result, bool) {
hosts, err := lookupMX(ctx, domain)
if err != nil || len(hosts) == 0 {
return Result{}, false
}
for _, host := range hosts {
if preset, ok := matchMX(host); ok {
r := preset.toResult(email, domain, "mx", "high")
r.Notes = append(r.Notes, "Configuration déduite des enregistrements MX («"+host+"»).")
return r, true
}
}
return Result{}, false
}